linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > Delphi >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·HexToStr函数和StrToHex函数
·Delphi中的进制转换
·delphi轻松设置无边框透明窗体
·delphi第三方控件安装(Ehlib)
·DELPHI组件安装全攻略
·delphi动态创建控件
·开发工具比较Visual C++ VS De
·delphi完整身份证效验程序实例
·delphi中的Format函数详解
·delphi编程获取打印机的打印任
·如何判断文本文件的编码格式
·深入研究Variant数组
·用delphi编写网络游戏的外挂
·Delphi技巧-用户自定义数据类型
·delphi设置控件透明
最新文章
·在应用程序中跟踪MOUSE的坐标
·压缩和修复MS Access 2000文件
·DELPHI 6.0 动画制做
·怎样在Delphi中调用LastError信
·怎样得到主域服务器名称
·怎样利用递归实现删除某一目录
·读出主键下所有项
·如何制作照片底片效果的图像(
·获得Modem的状态
·WebBrowser屏幕滚动的实现,设
·有关字符串处理的小技巧
·Delphi建立键盘鼠标动作纪录与
·Delphi中布尔类型辨析
·DELPHI程序注册码设计
·图形的不规则的Copy
Google
 
取得一台机器的CPU占用率
[ 作者:  加入时间:2007-12-03 14:36:39  来自:Linux联盟收集整理 ]
interfacez2ZLinux联盟
z2ZLinux联盟
usesz2ZLinux联盟
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,z2ZLinux联盟
Dialogs, StdCtrls;z2ZLinux联盟
z2ZLinux联盟
constz2ZLinux联盟
SystemBasicInformation = 0;z2ZLinux联盟
SystemPerformanceInformation = 2;z2ZLinux联盟
SystemTimeInformation = 3;z2ZLinux联盟
z2ZLinux联盟
typez2ZLinux联盟
TPDWord = ^DWORD;z2ZLinux联盟
z2ZLinux联盟
TSystem_Basic_Information = packed recordz2ZLinux联盟
dwUnknown1: DWORD;z2ZLinux联盟
uKeMaximumIncrement: ULONG;z2ZLinux联盟
uPageSize: ULONG;z2ZLinux联盟
uMmNumberOfPhysicalPages: ULONG;z2ZLinux联盟
uMmLowestPhysicalPage: ULONG;z2ZLinux联盟
uMmHighestPhysicalPage: ULONG;z2ZLinux联盟
uAllocationGranularity: ULONG;z2ZLinux联盟
pLowestUserAddress: Pointer;z2ZLinux联盟
pMmHighestUserAddress: Pointer;z2ZLinux联盟
uKeActiveProcessors: ULONG;z2ZLinux联盟
bKeNumberProcessors: byte;z2ZLinux联盟
bUnknown2: byte;z2ZLinux联盟
wUnknown3: word;z2ZLinux联盟
end;z2ZLinux联盟
z2ZLinux联盟
typez2ZLinux联盟
TSystem_Performance_Information = packed recordz2ZLinux联盟
liIdleTime: LARGE_INTEGER; {LARGE_INTEGER}z2ZLinux联盟
dwSpare: array[0..75] of DWORD;z2ZLinux联盟
end;z2ZLinux联盟
z2ZLinux联盟
typez2ZLinux联盟
TSystem_Time_Information = packed recordz2ZLinux联盟
liKeBootTime: LARGE_INTEGER;z2ZLinux联盟
liKeSystemTime: LARGE_INTEGER;z2ZLinux联盟
liExpTimeZoneBias: LARGE_INTEGER;z2ZLinux联盟
uCurrentTimeZoneId: ULONG;z2ZLinux联盟
dwReserved: DWORD;z2ZLinux联盟
end;z2ZLinux联盟
z2ZLinux联盟
varz2ZLinux联盟
NtQuerySystemInformation: function(infoClass: DWORD;z2ZLinux联盟
buffer: Pointer;z2ZLinux联盟
bufSize: DWORD;z2ZLinux联盟
returnSize: TPDword): DWORD; stdcall = nil;z2ZLinux联盟
z2ZLinux联盟
z2ZLinux联盟
liOldIdleTime: LARGE_INTEGER = ();z2ZLinux联盟
liOldSystemTime: LARGE_INTEGER = ();z2ZLinux联盟
SysBaseInfo: TSystem_Basic_Information;z2ZLinux联盟
SysPerfInfo: TSystem_Performance_Information;z2ZLinux联盟
SysTimeInfo: TSystem_Time_Information;z2ZLinux联盟
status: Longint; {long}z2ZLinux联盟
dbSystemTime: Double;z2ZLinux联盟
dbIdleTime: Double;z2ZLinux联盟
function GetCPUUsage:Double;z2ZLinux联盟
implementationz2ZLinux联盟
function Li2Double(x: LARGE_INTEGER): Double;z2ZLinux联盟
beginz2ZLinux联盟
Result := x.HighPart * 4.294967296E9 + x.LowPartz2ZLinux联盟
end;z2ZLinux联盟
z2ZLinux联盟
function GetCPUUsage:Double;z2ZLinux联盟
varz2ZLinux联盟
bLoopAborted : boolean;z2ZLinux联盟
beginz2ZLinux联盟
if @NtQuerySystemInformation = nil thenz2ZLinux联盟
NtQuerySystemInformation := GetProcAddress(GetModuleHandle(‘ntdll.dll‘),z2ZLinux联盟
‘NtQuerySystemInformation‘);z2ZLinux联盟
// get number of processors in the systemz2ZLinux联盟
status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo, SizeOf(SysBaseInfo), nil);z2ZLinux联盟
if status <> 0 then Exit;z2ZLinux联盟
// Show some informationz2ZLinux联盟
{with SysBaseInfo doz2ZLinux联盟
beginz2ZLinux联盟
ShowMessage(z2ZLinux联盟
Format(‘uKeMaximumIncrement: %d‘#13‘uPageSize: %d‘#13+z2ZLinux联盟
‘uMmNumberOfPhysicalPages: %d‘+#13+‘uMmLowestPhysicalPage: %d‘+#13+z2ZLinux联盟
‘uMmHighestPhysicalPage: %d‘+#13+‘uAllocationGranularity: %d‘#13+z2ZLinux联盟
‘uKeActiveProcessors: %d‘#13‘bKeNumberProcessors: %d‘,z2ZLinux联盟
[uKeMaximumIncrement, uPageSize, uMmNumberOfPhysicalPages,z2ZLinux联盟
uMmLowestPhysicalPage, uMmHighestPhysicalPage, uAllocationGranularity,z2ZLinux联盟
uKeActiveProcessors, bKeNumberProcessors]));z2ZLinux联盟
end;z2ZLinux联盟
}z2ZLinux联盟
bLoopAborted := False;z2ZLinux联盟
while not bLoopAborted doz2ZLinux联盟
beginz2ZLinux联盟
// get new system timez2ZLinux联盟
status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf(SysTimeInfo), 0);z2ZLinux联盟
if status <> 0 then Exit;z2ZLinux联盟
// get new CPU‘s idle timez2ZLinux联盟
status := NtQuerySystemInformation(SystemPerformanceInformation, @SysPerfInfo, SizeOf(SysPerfInfo), nil);z2ZLinux联盟
if status <> 0 then Exit;z2ZLinux联盟
// if it‘s a first call - skip itz2ZLinux联盟
if (liOldIdleTime.QuadPart <> 0) thenz2ZLinux联盟
beginz2ZLinux联盟
// CurrentValue = NewValue - OldValuez2ZLinux联盟
dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);z2ZLinux联盟
dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);z2ZLinux联盟
// CurrentCpuIdle = IdleTime / SystemTimez2ZLinux联盟
dbIdleTime := dbIdleTime / dbSystemTime;z2ZLinux联盟
// CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessorsz2ZLinux联盟
dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors + 0.5;z2ZLinux联盟
// Show Percentagez2ZLinux联盟
//Form1.Label1.Caption := FormatFloat(‘CPU Usage: 0.0 %‘,dbIdleTime);z2ZLinux联盟
//Application.ProcessMessages;z2ZLinux联盟
// Abort if user pressed ESC or Application is terminatedz2ZLinux联盟
Result:=dbIdleTime;z2ZLinux联盟
bLoopAborted:=True;z2ZLinux联盟
//bLoopAborted := (GetKeyState(VK_ESCAPE) and 128 = 128) or Application.Terminated;z2ZLinux联盟
end;z2ZLinux联盟
// store new CPU‘s idle and Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Linux下如何查看某一进程的CPU占用率  (2007-04-25 11:15:24)