获取当前CPU的运行速度

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);
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值