设为首页 加入收藏

TOP

15.2.3 本地监控示例(CPU使用率)
2013-10-07 14:37:01 来源: 作者: 【 】 浏览:63
Tags:15.2.3 本地 监控 示例 CPU 使用率

15.2.3  本地监控示例(CPU使用率)

本节中的示例将利用Windows自带的性能计数器,来实时地监测当前计算机的CPU使用率,其实现步骤如下所示。

(1)创建一个VC++(www.cppentry.com)工程选取控制台程序,命名为GetCpuUsage,如图15.1所示。

 
图15.1  创建VC++(www.cppentry.com)工程
(2)在GetCpuUsage.cpp文件中添加pdh.h头文件,并引用pdh.lib库文件。代码如下:
  1. #include "pdh.h"  
  2. #pragma comment(lib, "Pdh.lib") //显式连接Pdh.lib  

(3)在main()函数中添加如下代码:

  1. 01  void main(void)  
  2. 02  {  
  3. 03      PDH_STATUS status = ERROR_SUCCESS;  
  4. 04      HQUERY hQuery = NULL;                       //计数器对象句柄  
  5. 05      HCOUNTER hCounter = NULL;                   //计数器句柄  
  6. 06      PDH_FMT_COUNTERVALUE DisplayValue;          //计数器值  
  7. 07      DWORD dwCounterType = 0;                    //计数器类型  
  8. 08      status = PdhOpenQuery(NULL, 0, &hQuery);    //打开计数器对象  
  9. 09      if (ERROR_SUCCESS == status)  
  10. 10      {  
  11. 11      //PdhAddCounter()函数添加计数器,参数中Processor代表计数器对象,(0)表示          第1个处理器计数实例。如果计算机上有两个处理器,则第2个处理器计数实例用(1)     表示  
  12. 12      //% Processor Time表示计数器(取得处理器占用时间),注意%后面有个空格  
  13. 13          status = PdhAddCounter(hQuery, "\\Processor(0)\\% Processor                 Time", 0, &hCounter);  
  14. 14          if (ERROR_SUCCESS == status)  
  15. 15          {  
  16. 16          // PdhCollectQueryData()函数收集数据需两次调用, PdhCollectQuery  
  17.             DataEx只需一次  
  18. 17              PdhCollectQueryData(hQuery);        //首次收集数据  
  19. 18              while(true)  
  20. 19              {  
  21. 20                  PdhCollectQueryData(hQuery);    //再次收集数据  
  22. 21                  status = PdhGetFormattedCounterValue(hCounter,   
  23. 22      PDH_FMT_DOUBLE,   
  24. 23                          &dwCounterType, &DisplayValue);  
  25.                                                     //取得收集的数据值  
  26. 24                  printf("CPU占用 %.2f\n", DisplayValue.doubleva lue);  
  27. 25                  Sleep(1000);                    //1秒收集1次  
  28. 26              }  
  29. 27          }  
  30. 28          PdhCloseQuery(hQuery);                  //关闭计数器对象  
  31. 29      }  
  32. 30  }  

上述代码使用Windows性能计数器获取CPU占用率,功能实现步骤如下。

第4~8行定义并且打开计数器对象。

第13行添加感兴趣的计数器。

第16~20行收集感兴趣的计数器值,注意使用PdhCollectQueryData函数收集数据时要调用两次。

第21~23行取得计数器的值。

第28行关闭计数器对象。

说明:代码中的Sleep(1000)使线程暂停1秒执行,在循环中它相当于定时器。

监测到当前计算机的CPU使用率如图15.2所示。

 
图15.2  监测到计算机的CPU使用率


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.9.3 将接收到的数据保存到文件.. 下一篇13.1.3 数据收发功能简介

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: