相关文章推荐
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> GlobalMemoryStatusEx获得系统时间: CopyBOOL WINAPI GetSystemTimes( __out_opt LPFILETIME lpIdleTime, //空闲时间 __out_opt LPFILETIME lpKernelTime, //内核时间 __out_opt LPFILETIME lpUserTime //用户时间);
在网上查了一下,基本上都使用GetSystemTimes函数来取得当前CPU时间的,但是这个函数要到Windows XP SP1才有,在之前版本的Windows下无法使用。 上网搜了一下老外的文章,发现内部函数NtQuerySystemInformation可以取得当前CPU时间,而且各NT版本通用。 以下是我写的一个显示CPU使用率的代码: #include #include
int CompareFileTime(FILETIME time1, FILETIME time2) int a = time1.dwHighDateTime << 32 | time1.dwLowDateTime ; int b = time2.dwHighDateTime << 3 __out_opt LPFILETIME lpIdleTime, // 空闲时间 __out_opt LPFILETIME lpKernelTime, // 内进程占用时间 __out_opt LPFILETIME l...
在进程的性能数据采集过程中,经常用到的一个性能指标就是进程的cpu占用率,下面给出它的计算方法及示例代码。 1、CPU占用率的定义 CPU占用率:指进程在一个时间段内消耗的CPU时间与该时间段长度的比值。 2、CPU占用率计算方法 根据上述定义,可以得到进程CPU占用率计算公式如下: 进程消耗的CPU时间 = 进程消耗的内态时间 + 进程消耗的用户态时间,即 costTime =...
time_t t = time(0); char tmp[64]; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); puts( tmp )
c++ 获取windows cpu利用率 工作中遇到,需要获取本机的cpu利用率,网上查了很多,获取数值大多不准确。在window10系统上得到的cpu利用率都不准确,window7上的准确。 #include <iostream> #include <Windows.h> #include<string> using namespace std; __int64 Filetime2Int64(const FILETIME &ftime) LARGE_INT
Java如何获取Linux CPU占用率? 可以使用Java的ManagementFactory类中的OperatingSystemMXBean接口来获取Linux CPU占用率。具体来说,可以使用以下代码获取CPU占用率: ```java OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); double cpuUsage = osBean.getSystemLoadAverage(); 其中,`getSystemLoadAverage()`方法返回最近1、5、15分钟的系统平均负载,可以根据需要选择不同的时间间隔来获取CPU占用率。需要注意的是,这种方式获取CPU占用率是系统级别的,不能获取单个Java程序的CPU占用率。如果需要获取单个Java程序的CPU占用率,可以使用第三方库,如SIGAR。
 
推荐文章