|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
|
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论坛讨论 |
|
|
|
|
|