【系统信息获取】5,获取CPU当前使用率

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 ,并且每次触发后自动设置为nonsignaled
	while (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;
}

效果如图:



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值