1.实时获取下面的这个频率
2.获取的方法,使用性能计数器PDH来实现对性能数据的高级访问。PDH是Windows提供的库。相关文档可以自行查看。
实时频率 = 处理器性能*基准频率
下面就是代码:
获取的单位是MHz,可以进行转换。另外,和当前资源管理器显示的不是完全一致的,因为这个值是在实时更新的。
#include <Pdh.h>
#include <PdhMsg.h>
#include <iostream>
#pragma comment(lib,"pdh.lib")
double getCurrentCpuSpeed();
void main()
{
while (true)
{
std::cout << getCurrentCpuSpeed() << std::endl;
}
}
//获取当前CPU的频率 失败返回-1,成功返回一个大于0的数
double getCurrentCpuSpeed()
{
HQUERY query;
//打开PDH
PDH_STATUS status = PdhOpenQuery(NULL, NULL, &query);
if (status != ERROR_SUCCESS)
return -1;
HCOUNTER cpuPerformance;
HCOUNTER cpuBasicSpeed;
//添加CPU当前性能的计数器
status = PdhAddCounter(query, TEXT("\\Processor Information(_Total)\\% Processor Performance"), NULL, &cpuPerformance);
if (status != ERROR_SUCCESS)
return -1;
//添加CPU基准频率的计数器
status = PdhAddCounter(query, TEXT("\\Processor Information(_Total)\\Processor Frequency"), NULL, &cpuBasicSpeed);
if (status != ERROR_SUCCESS)
return -1;
//收集计数 因很多计数需要区间值 所以需要调用两次Query(间隔至少1s) 然后再获取计数值
PdhCollectQueryData(query);
Sleep(1000);
PdhCollectQueryData(query);
PDH_FMT_COUNTERVALUE pdhValue;
DWORD dwValue;
status = PdhGetFormattedCounterValue(cpuPerformance, PDH_FMT_DOUBLE, &dwValue, &pdhValue);
if (status != ERROR_SUCCESS)
return -1;
double cpu_performance = pdhValue.doubleValue / 100.0;
status = PdhGetFormattedCounterValue(cpuBasicSpeed, PDH_FMT_DOUBLE, &dwValue, &pdhValue);
if (status != ERROR_SUCCESS)
return -1;
double basic_speed = pdhValue.doubleValue;
//关闭PDH
PdhCloseQuery(query);
return (double)(cpu_performance * basic_speed);
}
文章评论