【发布时间】:2015-07-25 12:10:05
【问题描述】:
现状:
我正在尝试以 Hertz 为单位测量我系统的当前 CPU 利用率。
我查看了this answer,它解决了我的问题,但我似乎无法使代码正常工作。
这是我目前在main.cpp 中的代码(来自答案):
#include <Pdh.h>
#include <PdhMsg.h>
#include <Windows.h>
static PDH_HQUERY cpuQuery;
static PDH_HCOUNTER cpuTotal;
void init()
{
PDH_STATUS a = PdhOpenQuery(NULL, NULL, &cpuQuery);
PDH_STATUS i = PdhAddCounter(cpuQuery, L"\\Processor(_Total)\\% Processor Time", NULL, &cpuTotal);
PdhCollectQueryData(cpuQuery);
}
double getCurrentValue()
{
init();
PDH_FMT_COUNTERVALUE counterVal;
PdhCollectQueryData(cpuQuery);
PdhGetFormattedCounterValue(cpuTotal, PDH_FMT_DOUBLE, NULL, &counterVal);
return counterVal.doubleValue;
}
int main()
{
double CPUUsage = getCurrentValue();
}
问题:
从getCurrectValue() 返回的值为零。
相关观察:
我观察到,PDH_STATUS 类型的 a 和 i 中的值都为零?我推测这可能与我在 CPUUsage 中缺少值有关,尽管我不确定为什么该函数无法正确返回这些值。
其他信息:
我以前没用过PDH。
【问题讨论】:
-
如果两种状态都为 0,尽管如此,CPU 使用率为零,这可能是因为显示 cpu 速率所需的最小延迟(请参阅下面我的答案的编辑)。 .
-
只是几个澄清:(1) CPU 使用周期/秒在现代处理器中没有任何意义,因此 pdh 给出处理器的百分比; (2) pdh 命令提供基于操作系统活动而不是实际硬件性能计数器的估计值。