【系统信息获取】5,获取CPU当前使用率
来源:互联网 发布:java war包反编译 编辑:程序博客网 时间:2024/06/11 02:19
1,原理
CPU资源看做是一个个的时间片,统计CPU使用率也是计算在一段时间内忙碌的时间占比。
我们知道GetSystemTime可以得到当前系统时间,另外一个名字类似的函数,GetSystemTimes可以得到三种不同的时间(自开机以来):空闲时间,内核时间和用户时间。
函数原型:
BOOL WINAPI GetSystemTimes( _Out_opt_ LPFILETIME lpIdleTime, _Out_opt_ LPFILETIME lpKernelTime, _Out_opt_ LPFILETIME lpUserTime);
CPU要么是在内核态,要么是在用户态。相加就是CPU总时间。
所以有以下公式:
CPU使用率 = (内核时间 + 用户时间 - 空闲时间)/(内核时间 + 用户时间)。
在较短的间隔时间内,先后两次调用GetSystemTimes,然后相减,再使用上面的公式可得出这段时间内的CPU使用率。
2,使用
#include "stdafx.h"#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);}int _tmain(int argc, _TCHAR* argv[]){HANDLE hEvent;FILETIME preidleTime;FILETIME prekernelTime;FILETIME preuserTime;GetSystemTimes( &preidleTime, &prekernelTime, &preuserTime );hEvent = CreateEvent (NULL,FALSE,FALSE,NULL); // 初始值为 nonsignaled ,并且每次触发后自动设置为nonsignaledwhile (1){WaitForSingleObject( hEvent,1000 ); //等待500毫秒FILETIME idleTime;FILETIME kernelTime;FILETIME userTime;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);cout << "CPU利用率:" << cpu << "%" <<endl;preidleTime = idleTime;prekernelTime = kernelTime;preuserTime = userTime ;}return 0;}
效果如图:
0 0
- 【系统信息获取】5,获取CPU当前使用率
- 获取当前CPU使用率
- 获取系统CPU 使用率
- 获取系统的CPU使用率、内存使用率
- 【Delphi】获取系统CPU使用率
- 获取linux系统CPU使用率
- [系统级] 获取CPU使用率
- java 获取系统信息及CPU的使用率
- linuxc计算CPU使用率/c+shell获取系统top信息
- 编程获取系统当前cpu使用率/空闲率 、内存使用率、剩余可用内存等
- 编程获取系统当前cpu使用率/空闲率 、内存使用率、剩余可用内存等
- 【转】编程获取系统当前cpu使用率/空闲率 、内存使用率、剩余可用内存等
- linux获取当前进程的CPU使用率
- vc获取当前进程CPU使用率
- 获取CPU,内存使用率,磁盘相关信息
- VC++获取CPU使用率及信息
- VB6 获取内存、硬盘、CPU使用率信息
- 编程获取系统当前cpu使用率/空闲率 、内存使用率、剩余可用内存 Nvidia GPU的利用率等
- 自己的第一个博客
- template VS Inheritance
- mysql的备份与恢复
- 这些开源项目,你都知道吗?(持续更新中...)
- 我的缺点---虎头蛇尾的根源
- 【系统信息获取】5,获取CPU当前使用率
- COM与DCOM的区别与联系
- Java的内存管理3:"用ReferenceQueue代替finalize( )"
- Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
- Vim中如何复制和粘贴
- ResourceUtils 项目参数工具类
- windows下Qt5.1 for android开发环境配置
- 什么是Node.js?
- ADF集锦