我不知道有一个/多个 win32 api 函数用于查询本地 PC 处理器的当前速度。我不想使用 WMI,因为它似乎不太可能在所有 PC 上都可行。
您可以使用参数 ProcessorInformation 调用 Windows API 函数 CallNtPowerInformation。它返回一个 PROCESSOR_POWER_INFORMATION 结构,该结构告诉您系统每个 CPU 的当前和最大 CPU 速度。
不过,这仅在 Win32 桌面上受支持,不支持 Metro 或 Windows Phone。
QueryPerformanceFrequency
函数获取处理器速度。我说“通常”是因为该函数返回系统性能计时器组件的频率,但实际上所有当前可用的 CPU 都以与性能计时器组件相同的频率运行。
此功能自 Windows 2000 起就可用,因此当今大多数 PC 很可能都支持该功能。
您使用常用注册表功能从注册表中读取它
通过以下方法得到的频率与任务管理器中的CPU速度类似
#include <Pdh.h> // link to Pdh.lib
#define YOUR_CPU_MAX_FREQUENCY 3.3
HQUERY hquery;
// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhopenquerya
PdhOpenQueryA(nullptr, NULL, &hquery)
HCOUNTER hcounter;
// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddcountera
PdhAddCounterA(hquery, "\\Processor Information(_Total)\\% Processor Performance", NULL, &hcounter)
PdhCollectQueryData(hquery);
Sleep(200);
PdhCollectQueryData(hquery);
PDH_FMT_COUNTERVALUE value;
PdhGetFormattedCounterValue(hcounter, PDH_FMT_DOUBLE, nullptr, &value);
PdhCloseQuery(hquery);
double frequency = value.doubleValue / 100 * YOUR_CPU_MAX_FREQUENCY;
频率将是一个实时变化的值(以ghz为单位),例如1.2、2.6、...