获取CPU占有率的C++类

C++获取CPU使用率 C++获取CPU利用率,内容精简,一看就会 阅读详情

#pragma once

#define SystemBasicInformation 0
#define SystemPerformanceInformation 2
#define SystemTimeInformation 3

#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart))

class CCpuUsage
{
    public:
        CCpuUsage();
        ~CCpuUsage();

    public:
        int GetCpuUsage();                       //得到系统cpu利用率
        int SetRefreshInterval(int milli_sec);   //定时刷新间隔

    private:
            //类型定义
            typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);

        typedef struct
        {
            DWORD dwUnknown1;
            ULONG uKeMaximumIncrement;
            ULONG uPageSize;
            ULONG uMmNumberOfPhysicalPages;
            ULONG uMmLowestPhysicalPage;
            ULONG uMmHighestPhysicalPage;
            ULONG uAllocationGranularity;
            PVOID pLowestUserAddress;
            PVOID pMmHighestUserAddress;
            ULONG uKeActiveProcessors;
            BYTE bKeNumberProcessors;
            BYTE bUnknown2;
            WORD wUnknown3;
        } SYSTEM_BASIC_INFORMATION;

        typedef struct
        {
            LARGE_INTEGER liIdleTime;
            DWORD dwSpare[76];
        } SYSTEM_PERFORMANCE_INFORMATION;

        typedef struct
        {
            LARGE_INTEGER liKeBootTime;
            LARGE_INTEGER liKeSystemTime;
            LARGE_INTEGER liExpTimeZoneBias;
            ULONG uCurrentTimeZoneId;
            DWORD dwReserved;
        } SYSTEM_TIME_INFORMATION;

        //变量定义
        SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo;
        SYSTEM_TIME_INFORMATION SysTimeInfo;
        SYSTEM_BASIC_INFORMATION SysBaseInfo;

        double dbIdleTime;
        double dbSystemTime;

        LONG status;

        LARGE_INTEGER liOldIdleTime;
        LARGE_INTEGER liOldSystemTime;

        PROCNTQSI NtQuerySystemInformation;

        int m_nCpuUsage;

        //定时
        HWND m_hWnd;
        int  m_nRefreshInterval;//默认为1000毫秒
        int  m_nTimerID;

    private:
        static void CalcCpuUsage(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
        int OnTimer();
};

inline CCpuUsage::CCpuUsage()
{
    //
    m_hWnd = NULL;
    m_nRefreshInterval = 1000;
    m_nTimerID = 1000;
    m_nCpuUsage = 0;

    //
    memset(&liOldIdleTime  ,   0, sizeof(LARGE_INTEGER));
    memset(&liOldSystemTime,   0, sizeof(LARGE_INTEGER));

    //
    NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(
    GetModuleHandle("ntdll") , "NtQuerySystemInformation");
    if (!NtQuerySystemInformation)
        return;

    // get number of processors in the system
    status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL);
    if (status != NO_ERROR)
        return;

    // create control for timer
    m_hWnd = ::CreateWindow("static", "", 0, 0, 0, 0, 0, NULL, NULL, 0, NULL);
    ::SetWindowLong(m_hWnd , GWL_USERDATA , (long)(this) );

    TIMERPROC tp = (TIMERPROC)CalcCpuUsage;
    SetTimer(m_hWnd , m_nTimerID, m_nRefreshInterval, tp);

}

inline CCpuUsage::~CCpuUsage()
{
    KillTimer(m_hWnd , m_nTimerID);
    DestroyWindow(m_hWnd);
}

inline void CCpuUsage::CalcCpuUsage(
                HWND hwnd,
                UINT uMsg,
                UINT_PTR idEvent,
                DWORD dwTime
)
{
    CCpuUsage* pCpu = (CCpuUsage*)::GetWindowLong(hwnd , GWL_USERDATA);

    if ( pCpu )
    {
        pCpu->OnTimer();
    }

}

inline int CCpuUsage::OnTimer()
{
    status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0);

    if (status!=NO_ERROR)
        return 0;

    // get new CPU's idle time
    status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL);
    if (status != NO_ERROR)
        return 0;

    // if it's a first call - skip it
    if (liOldIdleTime.QuadPart != 0)
    {
            // CurrentValue = NewValue - OldValue
        dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
        dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);

            // CurrentCpuIdle = IdleTime / SystemTime
        dbIdleTime = dbIdleTime / dbSystemTime;

            // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
            dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5;

            m_nCpuUsage = (UINT)dbIdleTime;
        }

    // store new CPU's idle and system time
    liOldIdleTime = SysPerfInfo.liIdleTime;
    liOldSystemTime = SysTimeInfo.liKeSystemTime;

    // wait one second

    return 0;
}

inline int CCpuUsage::GetCpuUsage()
{
    return m_nCpuUsage;
}

inline int CCpuUsage::SetRefreshInterval(int milli_sec)
{
    m_nRefreshInterval = milli_sec;

    if ( m_hWnd )
    {
        TIMERPROC tp = (TIMERPROC)CalcCpuUsage;
        SetTimer(m_hWnd, m_nTimerID, m_nRefreshInterval ,tp);
    }

    return 0;

}
 

layer.open实现POST表单提交:iframe层核心属性与实战避坑指南 在前端开发中,弹层组件是实现模态交互的常见技术,其核心在于创建独立的视图上下文以隔离用户操作。layer作为广泛使用的弹层解决方案,其open方法通过丰富的配置属性,允许开发者精细控制弹层的型、内容与行为。理解其原理,特别是iframe层的应用,对于实现复杂数据提交场景至关重要。iframe层通过创建独立的浏览上下文,确保内部表单的提交不会导致父页面跳转,从而维护了单页应用的流畅体验。这一技术价值在于实现了表单提交与页面状态的解耦,提升了交互的健壮性。在实际工程实践中,它常被应用于后台管理系统的数据编辑、 阅读详情

相关推荐

前端面试题汇总

总结了一下之前面试遇到的问题,方便自己也方便他人

annier_11的博客 134

C++获取特定进程CPU使用率的实现代码

近来发现笔记本在关闭屏幕后风扇转得特别快,打开屏幕后看任务管理器,风扇马上减速,也没有发现大量占用CPU的进程。于是想写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程。于是自己写了一个C++CPUusage,方便地监视不同进程的CPU占用情况。本人编程还只是个新手,如有问题请多多指教( •̀ ω •́ )! 计算原理为调用GetProcessTimes(),与上次调用得到的结果相减得到CPU占用时间,再除以两次调用的时间差,从而得到占用百分比。其中OpenProcess需要的权限为PROCESS_QUERY_LIMITED_INFORMATION,因此没有管理员权限

c++获取cpu使用率(包含系统和单进程)

c++获取cpu使用率(包含系统和单进程)含多个例子 c++获取cpu使用率(包含系统和单进程)含多个例子 c++获取cpu使用率(包含系统和单进程)含多个例子

C++如何获取特定进程CPU使用率

这篇文章将为大家详细讲解有关C++如何获取特定进程CPU使用率,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。计算原理为调用GetProcessTimes(),与上次调用得到的结果相减得到CPU占用时间,再除以两次调用的时间差,从而得到占用百分比。其中OpenProcess需要的权限为PROCESS_QUERY_LIMITED_INFORMATION,因此没有管理员权限也可以使用。使用方法:初始化: 可以在构造函数中指定pid,也可以用setpid()指定pid。查看CPU

woaitingting1985的博客 5790

C++获取Windows系统的CPU占用

通过pch.h获取Windows系统的CPU利用率

qq_44606630的博客 3317

Linux下C/C++实现cpustat(测量CPU利用率)

cpustat是一个转储当前运行任务(即进程或内核线程)的CPU利用率的程序。cpustat用于监视系统中长期存在的进程的活动,例如守护进程、内核线程以及典型的用户进程。

chen1415886044的博客 4586

QT获取系统内存使用率,CPU使用率,硬盘容量(windows、linux都可用)

我写了个获取系统资源的,通过宏定义的方式区分了linux下和windows下各运行不同的代码。 头文件: #ifndef RESOURCE_MINITOR_H #define RESOURCE_MINITOR_H #include <QObject> #include <QTimer> #include <QProcess> #include <QDeb...

weixin_43935474的博客 7066

global

【代码】global。

备忘 640

项目遇到的问题以及解决

xiaopang #小胖出品 遇到的问题 1.Java 字符串转Date(转完后的日期与实际日期不符【月份总是1月】) 原因: 日期格式分不清: yyyy:年 MM:月份 dd:日 HH:时 mm:分 ss:秒 实际操作: /** * 提取出一个转换日期的方法 * * @param dateStr 要转为Date型的字符串 * @param format 日期格式

isliucheng的博客 324

asp.net core

用于创建一个 Web 应用程序的构建器 (WebApplicationBuilder) 实例。通过这个构建器,你可以配置应用程序的服务和中间件,进而构建和运行你的 ASP.NET Core Web 应用。 用于设置Web服务器所监听的URL和端口。通过这个方法,开发者可以指定应用程序在哪些地址和端口上运行,从而控制外部请求如何到达你的应用程序。 允许你访问应用程序的配置设置,这些设置通常包含在 appsettings.json、环境变量、用户机密、命令行参数等中。builder.Configuration

备忘 1350

基于SSM框架的智慧社区服务系统毕业设计实战指南

Java Web开发是构建企业级应用的核心技术栈,其核心在于通过分层架构(如MVC模式)实现业务逻辑与数据访问的解耦,从而提升系统的可维护性和可扩展性。Spring框架通过控制反转(IoC)和面向切面(AOP)管理对象生命周期,SpringMVC负责请求分发与视图解析,而MyBatis则作为持久层框架,通过灵活的SQL映射简化数据库操作。这一技术组合的价值在于能够高效、稳定地支撑复杂业务系统的开发,广泛应用于各信息管理、电商平台及服务系统中。在智慧社区这一具体应用场景下,系统旨在通过线上化流程(如报修、缴

weixin_30463341的博客 523

SpringBoot公共交通系统实战:从零部署到二次开发全解析

在Java Web开发领域,SpringBoot框架因其简化配置和快速开发能力,已成为构建企业级应用的主流选择。其核心原理在于通过自动配置和约定大于配置的理念,大幅降低了项目初始化和集成的复杂度,技术价值体现在能够帮助开发者快速搭建稳定、可扩展的后端服务。在众多应用场景中,管理系统和业务平台是SpringBoot的典型用武之地。本文聚焦于一个结合了经典技术栈的【毕业设计】实战项目——基于SpringBoot的公共交通路线查询与管理系统。该项目完整实现了公交线路与站点的管理、路线查询及换乘规划等核心功能,并提

weixin_30455023的博客 404

c++ 计算cpu占用

计算CPU占用率就是获取系统总的内核时间 用户时间及空闲时间 其中空闲时间就是内核空转 所以内核时间包含空闲时间 然后计算 运行时间 = 内核时间 加 用户时间 减去 空闲时间 间隔时间 = 内核时间 加 用户时间 cpu使用率% =运行时间 /间隔时间 ; 无论单个进程cpu占用率还是系统整个cpu占用路 都是如此原理 核心代码就是如下几段 BOOL res = Get...

weixin_30905133的博客 1052

如何使用c/c++实现读取linux cpu占用率的功能

可以使用Linux系统调用来读取CPU占用率。具体实现方法如下: 使用 fopen 打开文件 "/proc/stat"。 使用 fscanf 或 fgets 读取文件中的数据。 使用 sscanf 或 strtok 将读取到的字符串分割为数字。 利用读取到的数字计算出CPU占用率。 使用 fclose 关闭文件。 需要注意的是,这样的程序只能在Linux系统上运行,因为它依赖于Linux的/p...

weixin_35755188的博客 1052

C++ 获取CPU使用率、内存使用率、磁盘空间等

CPUMemDiskStatus.h #ifndef __CPUMemDiskStatus_h__ #define __CPUMemDiskStatus_h__ //每个磁盘的状态 typedef struct tagDISKSTATUS { DWORD _FreeAvalidToCaller; //用于容纳调用者可用的字节数量 BYTE DWORD _TotalNummber; /

sz76211822的专栏 1万+

C/C++获取Windows平台CPU占用率。主要方法:Pdh.lib库

最近在做系统信息相关的接口,为了实现跨平台,故在linux和Windows平台获取占用率信息。文章主要介绍Windows下的方法。此函数主要作用是:创建从实时源或日志文件收集性能数据的新查询,返回在后续 PDH 函数调用中使用的查询的句柄。

qq_52693411的博客 2276

C++性能监视(CPU性能, GPU使用率, 磁盘读写速度, 网络速度)

【代码】C++性能监视(CPU性能, GPU使用率, 磁盘读写速度, 网络速度)

FlameCyclone的博客 2303
上一篇: 用VC获取Windows系统CPU占有率
下一篇: 第二个作品--显微镜数码互动系统
guosenjuncs
博客等级 码龄21年 2粉丝 29原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值