当前位置: 首页 > news >正文

用PDH库获取CPU使用率(源码)

1、概述

PDH工作原理:
  第一次采集:获取当前CPU的"累计运行时间"
  第二次采集:一段时间后,再次获取累计运行时间
计算差值:
用第二次的值,减去第一次的值,得出这段时间内的活跃时间占比。

所以会有如下结论:

调用间隔返回值含义是否「实时」
1 秒过去 1 秒的 CPU 使用率✅ 实时
5 秒过去 5 秒的平均使用率✅ 基本实时
30 秒过去 30 秒的平均使用率⚠️ 略有延迟
30 分钟过去 30 分钟的平均使用率❌ 不实时,是历史平均

2、源码

2.1、调用示例

    CCpuUsageUtil cpu;if (!cpu.Init()){printf("初始化失败!可能是计数器名称错误(中文系统?)\n");return -1;}cpu.GetUsage();Sleep(2000);int usage = cpu.GetUsage();printf("CPU 使用率: %d%%\n", usage);

2.2、源码

#ifndef Cpu_Usage_h_
#define Cpu_Usage_h_#include <pdh.h>
#include <pdhmsg.h>#define MAX_RAW_VALUES          20// \Processor(_Total):表示所有CPU核心的总和
// % Processor Time:表示CPU使用率(百分比)
const wchar_t g_szCounterName[] = L"\\Processor Information(_Total)\\% Processor Time";typedef struct _tag_PDHCounterStruct {HCOUNTER hCounter;      // Handle to the counter - given to use by PDH Library//int nNextIndex;         // element to get the next raw value//int nOldestIndex;       // element containing the oldes raw value//int nRawCount;          // number of elements containing raw values//PDH_RAW_COUNTER a_RawValue[MAX_RAW_VALUES]; // Ring buffer to contain raw values
} PDHCOUNTERSTRUCT, *PPDHCOUNTERSTRUCT;class CCpuUsageUtil
{
public:CCpuUsageUtil();virtual ~CCpuUsageUtil();BOOL Init();void Unit();int GetUsage();protected:PPDHCOUNTERSTRUCT  m_pCounterStruct;HQUERY  m_hQuery;
};#endif
#include "CpuUsage.h"#pragma comment(lib,"PDH.lib")CCpuUsageUtil::CCpuUsageUtil()
{m_hQuery = NULL;m_pCounterStruct = NULL;
}CCpuUsageUtil::~CCpuUsageUtil()
{Unit();
}BOOL CCpuUsageUtil::Init()
{if (ERROR_SUCCESS != PdhOpenQuery(NULL, 0, &m_hQuery)){return FALSE;}m_pCounterStruct = new PDHCOUNTERSTRUCT;PDH_STATUS pdh_status = PdhAddCounter(m_hQuery, g_szCounterName, (DWORD)m_pCounterStruct, &(m_pCounterStruct->hCounter));if (ERROR_SUCCESS != pdh_status){Unit();return FALSE;}PdhCollectQueryData(m_hQuery);return TRUE;
}void CCpuUsageUtil::Unit()
{PdhCloseQuery(m_hQuery);m_hQuery = nullptr;if (m_pCounterStruct){delete m_pCounterStruct;m_pCounterStruct = nullptr;}
}int CCpuUsageUtil::GetUsage()
{PDH_FMT_COUNTERVALUE pdhFormattedValue;PdhCollectQueryData(m_hQuery);if (ERROR_SUCCESS != PdhGetFormattedCounterValue(m_pCounterStruct->hCounter, PDH_FMT_LONG, NULL, &pdhFormattedValue)){return 0;}return pdhFormattedValue.longValue;
}
http://www.dtcms.com/a/488285.html

相关文章:

  • 展示型网站一样做seo优化吗华为云建站和阿里云建站区别
  • 《扫雷:病毒蔓延》- 颠覆传统的动态扫雷游戏
  • phpwind做的网站wordpress 双分页
  • 西宁网站制作公司专业wordpress主题开发
  • 前端与后端开发详解:从概念到就业技能指南_前后端开发
  • Java业务异常处理最佳实践
  • 电子商务网站开发教程课后答案做公众号策划的网站
  • 小程序自助建站wordpress您的密码重设链接无效
  • 龙华网站建设主要工作广东省住房和城乡建设局网站
  • 建设企业网站得花多少钱成都 网站开发公司
  • 深圳制作企业网站的公司网站项目策划书模板
  • 为什么要尽量将MySQL表字段要设置为NOT NULL?
  • 数据结构与算法(递归)
  • 「深度学习笔记2」线性代数——深度学习的“骨架”
  • 王建设医生网站公司网站后台维护
  • 网站页面设计与制作实践养殖场网站模板
  • 外贸访问国外网站企业门户网站的意义
  • 南京网站开发选南京乐识赞上海做推
  • 深圳网站定制价格低梵客家装电话
  • 绍兴建设局网站首页重庆网络科技有限公司
  • 消息中间件3.超配比
  • 贸易网站建站泰安百度推广代理
  • 电商网站开发主要技术问题简单html网页制作代码
  • 上架苹果APP的时候在哪里填写APP的隐私政策信息
  • Jar包和War包的区别以及如何选择
  • 杭州网站模板还有什么网站可以做面包车拉货
  • 静态网站结构如何更新中国建设银行陕西省分行网站
  • 深圳品牌网站设计公司价格防内涵吧网站源码
  • 网站申请备案保定建设厅网站
  • 企业网站seo关键词优化排名思路用php做网站