GetSystemTimes 获取CPU占用率

来源:互联网 发布:域名搜索引擎注册 编辑:程序博客网 时间:2024/06/05 17:35
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 ,并且每次触发后自动设置为nonsignaledwhile (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>
原创粉丝点击