Windows系统下获取CPU的使用率

#include "stdafx.h"

#include <windows.h>
#include <time.h>

#include <iostream>

using std::endl;
using std::cout;


unsigned long long FileTimeSub(FILETIME ftEndTime, FILETIME ftStartTime)
{
	unsigned long long nDeltaTime;

	unsigned long long nEndTime = (unsigned long long)ftEndTime.dwHighDateTime << 32 | ftEndTime.dwLowDateTime;
	unsigned long long nStartTime = (unsigned long long)ftStartTime.dwHighDateTime << 32 | ftStartTime.dwLowDateTime;

	nDeltaTime = nEndTime - nStartTime;

	return nDeltaTime; 
}

unsigned long long GetCPUUsageRate()
{
	FILETIME ftStartIdleTime, ftStartKernelTime, ftStartUserTime;
	FILETIME ftEndIdleTime, ftEndKernelTime, ftEndUserTime;

	GetSystemTimes(&ftStartIdleTime, &ftStartKernelTime, &ftStartUserTime);
	Sleep(1000);
	GetSystemTimes(&ftEndIdleTime, &ftEndKernelTime, &ftEndUserTime);

	unsigned long long nDeltaIdleTime = FileTimeSub(ftEndIdleTime, ftStartIdleTime);
	unsigned long long nDeltaKernelTime = FileTimeSub(ftEndKernelTime, ftStartKernelTime);
	unsigned long long nDeltaUserTime = FileTimeSub(ftEndUserTime, ftStartUserTime);

	cout << "kernel time: " << nDeltaKernelTime << endl;
	cout << "user time:   " << nDeltaUserTime << endl;
	cout << "idle time:   " << nDeltaIdleTime << endl;

	if (nDeltaKernelTime + nDeltaUserTime == 0)
	{
		return 0;
	}

	unsigned long long nCPUUsageRate  = ((nDeltaKernelTime + nDeltaUserTime - nDeltaIdleTime) * 100) / (nDeltaKernelTime + nDeltaUserTime);

	return nCPUUsageRate;
}

int _tmain(int argc, _TCHAR* argv[])
{
	for (; ; )
	{
		cout << "CPU的使用率: " << GetCPUUsageRate() << "%" << endl;
		Sleep(3000);
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/Oasis_maT/article/details/80053554