How to get CPU usage?

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
#define COUNT_INTERVAL 1000
const TCHAR *pszPathBuff=_T("\\Processor(_Total)\\% Processor Time");
//% Processor Time 指处理器用来执行非闲置线程时间的百分比。
//计算方法是,测量范例间隔内非闲置线程活动的时间,用范例间隔减去该值。
//(每台处理器有一个闲置线程,该线程在没有其他线程可以运行时消耗周期)。
//这个计数器是处理器活动的主要说明器,显示在范例间隔时所观察的繁忙时间平均百分比。
//这个值是用 100% 减去该服务不活动的时间计算出来的。

int main()
{
	HQUERY          hQuery;
	HCOUNTER        hCounter;
	PDH_STATUS      pdhStatus;
	PDH_FMT_COUNTERVALUE   fmtValue;
	DWORD           ctrType;
	SYSTEMTIME      stSampleTime;
	
	__try
	{
		pdhStatus = PdhOpenQuery(NULL, NULL, &hQuery);
		if (ERROR_SUCCESS != pdhStatus)
		{
			_tprintf(TEXT("PdhOpenQuery failed with %ld.\n"), pdhStatus);
			__leave;
		}
		
		pdhStatus = PdhAddCounter (hQuery,
			pszPathBuff, 
			0, 
			&hCounter);
		if (ERROR_SUCCESS != pdhStatus)
		{
			_tprintf(TEXT("PdhBrowseCounters failed with 0x%x.\n"), pdhStatus);
			__leave;
		}
		
		pdhStatus = PdhCollectQueryData (hQuery);
		if (ERROR_SUCCESS != pdhStatus)
		{
			_tprintf(TEXT("PdhCollectQueryData failed with 0x%x.\n"), pdhStatus);
			__leave;
		}
		
		while (!_kbhit()) 
		{
			
			Sleep(COUNT_INTERVAL);
			GetLocalTime (&stSampleTime);
			pdhStatus = PdhCollectQueryData (hQuery);
			_tprintf (
				TEXT("\n\"%2.2d/%2.2d/%4.4d %2.2d:%2.2d:%2.2d.%3.3d\""),
				stSampleTime.wMonth, 
				stSampleTime.wDay, 
				stSampleTime.wYear,
				stSampleTime.wHour, 
				stSampleTime.wMinute, 
				stSampleTime.wSecond,
				stSampleTime.wMilliseconds);
			
			pdhStatus = PdhGetFormattedCounterValue (hCounter,
				PDH_FMT_DOUBLE,
				&ctrType,
				&fmtValue);
			
			if (pdhStatus == ERROR_SUCCESS)
			{
				_tprintf (TEXT(",\"%.20g\""), fmtValue.doubleValue);
			}
			else
			{
				_tprintf(TEXT("\nPdhGetFormattedCounterValue failed with 0x%x.\n"), pdhStatus);
				__leave;
			}
		}
	}
	__finally
	{
		if (hQuery)
			PdhCloseQuery (hQuery);
	}
	
	
	return pdhStatus;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值