昨天写了使用NtQuerySystemInformation函数获取CPU占用率的方法,这个函数可以获得CPU占用率在内的许多系统信息。不过今天介绍的是GetSystemTimes这个函数,它同样可以获得CPU占用率。

为什么要介绍GetSystemTimes这个函数呢,因为MSDN上说NTquerySystemInformation这个函数只能在NT核心的系统上使用(经测试在Win7下也可使用),而GetSystemTimes这个函数MSDN上说在Vista和XP SP1以上系统可用。为了我们的程序在未来的新系统上不至于失效,所以介绍一下GetSystemTimes这个函数的用法。

函数声明:

BOOL GetSystemTimes(LPFILETIME  IdleTime,LPFILETIME   KernelTime,LPFILETIME   UserTime)

使用前先声明三个FILETIME类型的结构体,包含Windows.h这个头文件就会有了。

注意这里的KernelTime里已经包含了IdleTime所以在计算时要减掉。

然后要记得导出函数GetProcAddress(GetModuleHandle(TEXT(“Kernel32dll”)),”GetSystemTimes”)

然后是计算CPU占用率的公式

CPURate=100.0-(NowIdleTime-LastIdleTime)/(NowKernelTime-LastKernelTime+NowUserTime-LastUserTime)*100.0

好了,就不写代码了,大家有兴趣可以自己试试。

About Sextant

爱好图形学,爱好游戏,希望与大家一起学习,一起分享经验。

发表评论

电子邮件地址不会被公开。

Post Navigation