none
C++下利用WMI获取CPU使用率的问题 RRS feed

  • 问题

  • 为了获得与任务管理类似的CPU利用率的值,我尝试了一下3种方式,想问一下以下三种方式哪种获取的数据更准确?

    1.WMI 查询Win32_Processor 类的LoadPercentage值。但是根据查询结果,这个值总是偏小的很多。

    2.WMI 查询Win32_PerfFormattedData_PerfOS_Processor 类里的PercentProcessorTime。但是这个值总是返回一个相当大值,和SO上说的情况不太一样。

    3.WMI 查询Win32_PerfRawData_PerfOS_Processor 里的PercentProcessorTime和Timestamp_Sys100NS,在两个时间点查询这两个值,利用公式

    Formula - (1- ((N2 - N1) / (D2 - D1))) x 100

    来计算CPU的使用率,但是目前我的查询的情况是两个时间点查询的值总是相同的,我不清楚原因在哪。详细的代码情况我在stackoverflow上有列出。http://stackoverflow.com/questions/32272592/how-to-get-cpu-usage-in-wmi-using-c

    谢谢大家的阅读。

    2015年8月28日 19:39

答案

  • Hi spartawhy117,

    我根据你的代码做了一些测试,我怀疑可能是因为你用unsigned __int64 类型长度不够长导致两个时间点查询的值相同。比如我用下面的代码的获取那些值,不同点时间点是有一些不同的,而你的用的unsigned __int64 只取了高位。

    hres = pclsObj->Get(L"PercentProcessorTime", 0, &vtProp, 0, 0);
    wcout << " PercentProcessorTime  : " << vtProp.bstrVal << endl;
    
    hres = pclsObj->Get(L"TimeStamp_Sys100NS", 0, &vtProp, 0, 0);
    wcout << " TimeStamp_Sys100NS  : " << vtProp.bstrVal << endl;

    请看截图:

    希望这些对你有帮助。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Shu 2017 2015年9月9日 1:50
    2015年8月31日 6:47

全部回复

  • Hi spartawhy117,

    我根据你的代码做了一些测试,我怀疑可能是因为你用unsigned __int64 类型长度不够长导致两个时间点查询的值相同。比如我用下面的代码的获取那些值,不同点时间点是有一些不同的,而你的用的unsigned __int64 只取了高位。

    hres = pclsObj->Get(L"PercentProcessorTime", 0, &vtProp, 0, 0);
    wcout << " PercentProcessorTime  : " << vtProp.bstrVal << endl;
    
    hres = pclsObj->Get(L"TimeStamp_Sys100NS", 0, &vtProp, 0, 0);
    wcout << " TimeStamp_Sys100NS  : " << vtProp.bstrVal << endl;

    请看截图:

    希望这些对你有帮助。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Shu 2017 2015年9月9日 1:50
    2015年8月31日 6:47
  • 写写你的回答。但是现在还是有个疑问,这个bstrVal 到底是什么类型的值?据MSDN上的文档介绍,那个PercentProcessorTime是unsigned long long的值。后续我要计算这些数值的话,这个bstrVal该如何做值类型的转换?
    2015年9月12日 7:48