Re: Prozessor Auslastung
Eigentlich könnte man doch die WHILE-Schleife und das Sleep rausnehmen :?:
Delphi-Quellcode:
wenns falsch ist, seid mir bitte nicht böse :) hab kein Delphi zum Testen auf meinem Internet-PC installiert
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TPDWord = ^DWORD; TSystem_Basic_Information = packed record dwUnknown1: DWORD; uKeMaximumIncrement: ULONG; uPageSize: ULONG; uMmNumberOfPhysicalPages: ULONG; uMmLowestPhysicalPage: ULONG; uMmHighestPhysicalPage: ULONG; uAllocationGranularity: ULONG; pLowestUserAddress: Pointer; pMmHighestUserAddress: Pointer; uKeActiveProcessors: ULONG; bKeNumberProcessors: byte; bUnknown2: byte; wUnknown3: word; end; type TSystem_Performance_Information = packed record liIdleTime: LARGE_INTEGER; {LARGE_INTEGER} dwSpare: array[0..75] of DWORD; end; type TSystem_Time_Information = packed record liKeBootTime: LARGE_INTEGER; liKeSystemTime: LARGE_INTEGER; liExpTimeZoneBias: LARGE_INTEGER; uCurrentTimeZoneId: ULONG; dwReserved: DWORD; end; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; const SystemBasicInformation = 0; SystemPerformanceInformation = 2; SystemTimeInformation = 3; var Form1: TForm1; NtQuerySystemInformation: function(infoClass: DWORD; buffer: Pointer; bufSize: DWORD; returnSize: TPDword): DWORD; stdcall = nil; liOldIdleTime: LARGE_INTEGER = (); liOldSystemTime: LARGE_INTEGER = (); implementation {$R *.dfm} function Li2Double(x: LARGE_INTEGER): Double; begin Result := x.HighPart * 4.294967296E9 + x.LowPart end; procedure GetCPUUsage; var SysBaseInfo: TSystem_Basic_Information; SysPerfInfo: TSystem_Performance_Information; SysTimeInfo: TSystem_Time_Information; status: Longint; {long} dbSystemTime: Double; dbIdleTime: Double; bLoopAborted : boolean; begin if @NtQuerySystemInformation = nil then NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'), 'NtQuerySystemInformation'); // get number of processors in the system status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo, SizeOf(SysBaseInfo), nil); if status <> 0 then Exit; // Show some information with SysBaseInfo do begin ShowMessage( Format('uKeMaximumIncrement: %d'#13'uPageSize: %d'#13+ 'uMmNumberOfPhysicalPages: %d'+#13+'uMmLowestPhysicalPage: %d'+#13+ 'uMmHighestPhysicalPage: %d'+#13+'uAllocationGranularity: %d'#13+ 'uKeActiveProcessors: %d'#13'bKeNumberProcessors: %d', [uKeMaximumIncrement, uPageSize, uMmNumberOfPhysicalPages, uMmLowestPhysicalPage, uMmHighestPhysicalPage, uAllocationGranularity, uKeActiveProcessors, bKeNumberProcessors])); end; bLoopAborted := False; // get new system time status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf(SysTimeInfo), 0); if status <> 0 then Exit; // get new CPU's idle time status := NtQuerySystemInformation(SystemPerformanceInformation, @SysPerfInfo, SizeOf(SysPerfInfo), nil); if status <> 0 then Exit; // if it's a first call - skip it if (liOldIdleTime.QuadPart <> 0) then begin // CurrentValue = NewValue - OldValue dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime); dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime); // CurrentCpuIdle = IdleTime / SystemTime dbIdleTime := dbIdleTime / dbSystemTime; // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors + 0.5; // Show Percentage Form1.Label1.Caption := FormatFloat('CPU Usage: 0.0 %',dbIdleTime); Application.ProcessMessages; // Abort if user pressed ESC or Application is terminated bLoopAborted := (GetKeyState(VK_ESCAPE) and 128 = 128) or Application.Terminated; end; // store new CPU's idle and system time liOldIdleTime := SysPerfInfo.liIdleTime; liOldSystemTime := SysTimeInfo.liKeSystemTime; end; procedure TForm1.Button1Click(Sender: TObject); begin GetCPUUsage end; end. |
Re: Prozessor Auslastung
Vielleicht etwas OT aber...
@tobias2207: du hast ja jetzt fast 3 MB Bilddateien auf dem DP-Server abgeladen. Der Nutzinhalt ist (jetzt nachdem alles gekärt ist) gleich Null. Also ich mache mir da immer etwas Sorgen, dass die DP zugemüllt wird. Ich reduziere Screenshots immer auf 256 Farben und speichere dann als GIF-Image; das schont die Platte und das Internet. |
Re: Prozessor Auslastung
screenshots werden doch automatisch nach einem Jahr oder so rausgenommen? ich hab mal einen alten Artikel gelesen und da haben die Links zum Anhang nich mehr funktioniert.
|
Re: Prozessor Auslastung
also ich bekomme bei der suche 102 ergebnisse!
...und wegen der screenshots! es gibt auch usr ohne dsl oder schnelleres! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz