GetSystemTimes 获取CPU占用率
GlobalMemoryStatusEx获得系统时间:CopyBOOL WINAPI GetSystemTimes(__out_optLPFILETIME lpIdleTime,//空闲时间__out_optLPFILETIME lpKernelTime, //内核时间__out_optLPFILETIME lpUserTime//用户时间);
·
GlobalMemoryStatusEx 获得系统时间: CopyBOOL WINAPI GetSystemTimes( __out_opt LPFILETIME lpIdleTime, //空闲时间 __out_opt LPFILETIME lpKernelTime, //内核时间 __out_opt LPFILETIME lpUserTime //用户时间 ); #define _WIN32_WINNT 0x0501 #include <Windows.h> #include <iostream> using namespace std; __int64 CompareFileTime ( FILETIME time1, FILETIME time2 ) { __int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime ; __int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime ; return (b - a); } void main() { HANDLE hEvent; BOOL res ; FILETIME preidleTime; FILETIME prekernelTime; FILETIME preuserTime; FILETIME idleTime; FILETIME kernelTime; FILETIME userTime; res = GetSystemTimes( &idleTime, &kernelTime, &userTime ); preidleTime = idleTime; prekernelTime = kernelTime; preuserTime = userTime ; hEvent = CreateEvent (NULL,FALSE,FALSE,NULL); // 初始值为 nonsignaled ,并且每次触发后自动设置为nonsignaled while (1){ WaitForSingleObject( hEvent,1000 ); //等待500毫秒 res = GetSystemTimes( &idleTime, &kernelTime, &userTime ); int idle = CompareFileTime( preidleTime,idleTime); int kernel = CompareFileTime( prekernelTime, kernelTime); int user = CompareFileTime(preuserTime, userTime); int cpu = (kernel +user - idle) *100/(kernel+user);//(总的时间-空闲时间)/总的时间=占用cpu的时间就是使用率 int cpuidle = ( idle) *100/(kernel+user); cout << "CPU利用率:" << cpu << "%" << " CPU空闲率:" <<cpuidle << "%" <<endl; preidleTime = idleTime; prekernelTime = kernelTime; preuserTime = userTime ; } }
接口是在 Winbase.h 文件中声明的,声明如下:
#if _WIN32_WINNT >= 0x0501
BOOL
WINAPI
GetSystemTimes(
LPFILETIME lpIdleTime,
LPFILETIME lpKernelTime,
LPFILETIME lpUserTime
);
#endif // (_WIN32_WINNT >= 0x0501)
注意,这个宏 #if _WIN32_WINNT >= 0x0501 ,它的意思是,只有当windows版本高于0x0501,也就是WinXP SP1时,声明才有效,原来如此!
修改头文件声明为:
#define _WIN32_WINNT 0x0501
#include <Windows.h>
更多推荐



所有评论(0)