用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧Delphi

获取CPU使用率

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:19:41
1、2k以后的操作系统可使用 ntdll.dll中的隐式函数
Windows NT/2000中获取CPU使用率的方法与Windows 9x系统中所使用的方法不同,Windows NT/2000中获取CPU使用率不用"性能计数器"。而是使用一个NTDLL.DLL中未公开的API函数--NtQuerySystemInformation。它的使用方法参见另外一篇文章:《Windows NT/2000系统中如何获取系统的启动时间》。

为了计算Windows NT/2000系统中CPU的使用率,我们使用下面的公式:

CpuUsageInPercent = 100 - (CpuTimen - CpuTimen-1 - CpuTime0) / (SystemTimen - SystemTimen-1 - SystemTime0) / NumberOfProcessors * 100

这里
CpuTime为CPU的空闲时间(毫秒);
SystemTime为系统时间(毫秒);
NumberOfProcessors为系统中处理器的数量;
0,1,n 表示取样数(0指最老的取样,1 指最近的取样,n 指最新的取样);

下面我们来求出调用NtQuerySystemInformation函数所必需的参数值。首先求出处理器数量值,SYSTEM_BASIC_INFORMATION结构中有一个bKeNumberProcessors成员,它就是我们所需要的。

#define SystemBasicInformation 0

typedef struct
{
DWORD dwUnknown1;
ULONG uKeMaximumIncrement;
ULONG uPageSize;
ULONG uMmNumberOfPhysicalPages;
ULONG uMmLowestPhysicalPage;
ULONG uMmHighestPhysicalPage;
ULONG uAllocationGranularity;
PVOID pLowestUserAddress;
PVOID pMmHighestUserAddress;
ULONG uKeActiveProcessors;
BYTE bKeNumberProcessors;
BYTE bUnknown2;
WORD wUnknown3;
} SYSTEM_BASIC_INFORMATION;

LONG status;
SYSTEM_BASIC_INFORMATION Sbi;

status = NtQuerySystemInformation(SystemBasicInformation,&Sbi,sizeof(Sbi),0);

为了实现多个取样,我们需要在循环中论询CpuTime 和 SystemTime的值并将它们的旧的值存储在临时变量中。有关如何获取系统时间的方法请参见:《Windows NT/2000系统中如何获取系统的启动时间》。CPU的空闲时间存储在SYSTEM_PERFORMANCE_INFORMATION结构的liIdleTime 成员中。

#define SystemPerformanceInformation 2

typedef struct
{
LARGE_INTEGER liIdleTime;
DWORD dwSpare[76];
} SYSTEM_PERFORMANCE_INFORMATION;

LARGE_INTEGER liOldIdleTime = {0,0};
LARGE_INTEGER liOldSystemTime = {0,0};
SYSTEM_PERFORMANCE_INFORMATION Spi;

while (1) {
status = NtQuerySystemInformation(SystemTimeInformation,&Sti,sizeof(Sti),0);
status = NtQuerySystemInformation(SystemPerformanceInformation,&Spi,sizeof(Spi),0);

// calculate the CPU usage here

liOldIdleTime = Spi.liIdleTime;
liOldSystemTime = Sti.liKeSystemTime;

Sleep(1000);
}

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

相关文章

PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:31,421.88000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号