一.前言
楼主最近在获取电脑设备的一些信息,今天想获取和计算cpu的使用率,于是分享记录下
二.核心代码
主要是利用了GetSystemTimes这个系统API
void getCpu()
{
// FILETIME 是一个用两个32位字节表示时间值的结构体
// dwLowDateTime 低位32位时间值。
// dwHighDateTime 高位32位时间值
static FILETIME preidleTime;
static FILETIME prekernelTime;
static FILETIME preuserTime;
FILETIME idleTime;
FILETIME kernelTime;
FILETIME userTime;
// 三个参数分别为 cpu空闲时间 内核进程占用时间 用户进程占用时间
// 函数执行成功返回true 执行失败返回false
bool k = GetSystemTimes(&idleTime, &kernelTime, &userTime);
qDebug() << "GetSystemTimes:" << k;
if (!k)
return "";
quint64 x, y;
int idle, kernel, user;
x = (preidleTime.dwHighDateTime << 31) | preidleTime.dwLowDateTime;
y = (idleTime.dwHighDateTime << 31) | idleTime.dwLowDateTime;
idle = y - x;
x = (prekernelTime.dwHighDateTime << 31) | prekernelTime.dwLowDateTime;
y = (kernelTime.dwHighDateTime << 31) | kernelTime.dwLowDateTime;
kernel = y - x;
x = (preuserTime.dwHighDateTime << 31) | preuserTime.dwLowDateTime;
y = (userTime.dwHighDateTime << 31) | userTime.dwLowDateTime;
user = y - x;
int cpuPercent = (kernel + user - idle) * 100 / (kernel + user);
preidleTime = idleTime;
prekernelTime = kernelTime;
preuserTime = userTime;
QString msg = QString("CPU : %1%")
.arg(cpuPercent);
return msg;
}
三.其他
1.该核心代码是来自http://www.qtcn.org/bbs/read-htm-tid-60613.html
楼主只是去理解,并添加自己理解到的注释
2.该代码中计算百分比的方式很准确,起码在win下是这样的,linux下楼主还没有对应的环境,所以没有测试,但是他的计算方式和我理解的稍微不同,后续还需要再理解为啥是这样计算的