win32 api函数获取处理器当前速度

问题描述 投票:0回答:4

我不知道有一个/多个 win32 api 函数用于查询本地 PC 处理器的当前速度。我不想使用 WMI,因为它似乎不太可能在所有 PC 上都可行。

c++ winapi visual-c++
4个回答
19
投票

您可以使用参数 ProcessorInformation 调用 Windows API 函数 CallNtPowerInformation。它返回一个 PROCESSOR_POWER_INFORMATION 结构,该结构告诉您系统每个 CPU 的当前和最大 CPU 速度。

不过,这仅在 Win32 桌面上受支持,不支持 Metro 或 Windows Phone。


2
投票

您(通常)可以使用

QueryPerformanceFrequency
函数获取处理器速度。我说“通常”是因为该函数返回系统性能计时器组件的频率,但实际上所有当前可用的 CPU 都以与性能计时器组件相同的频率运行。

此功能自 Windows 2000 起就可用,因此当今大多数 PC 很可能都支持该功能。


0
投票

使用常用注册表功能从注册表中读取它


0
投票

通过以下方法得到的频率与任务管理器中的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、...

© www.soinside.com 2019 - 2024. All rights reserved.