![]() |
CPU Auslastung auslesen
Guten Abend,
habe vor eine Programm zu schreiben, das diverse Systeminformationen ausliest u.a. CPU und RAM Auslastung. Einen Code für die RAM Auslastung, sowohl als grafische als auch werte basierend habe ich schon.
Code:
Kann mir jemand helfen dies auch für die CPU Auslastung zu schaffen? Im Forum habe ich zwar einen Code gefunden allerdings wird dort die Auslastung der einzelnen Prozesse ausgegeben. Bin in Sachen Delphi-Programmieren noch eher ein Grünschnabel von daher wäre ich mit einem einfachen Lösungsweg zufrieden bei dem das Ziel erreicht wird (auch wenns quick and dirty ist).
procedure TForm1.Timer1Timer(Sender: TObject);
var x, y: real; memory: TMemoryStatus; Ram_ani, Ram : integer; aRam:string; begin memory.dwLength := SizeOf(memory); GlobalMemoryStatus(memory); x := memory.dwTotalPhys - memory.dwAvailPhys; y := memory.dwTotalPhys; Ram:=round(((x/y)*100)); str(Ram, aRam); edit2.text:=aRam; Ram_ani := round(((x/y)*100)); ProgressBar1.Position := Ram_ani; end; Hoffe jemand kann mir weiterhelfen. Gruß Daniel |
Re: CPU Auslastung auslesen
einfach nur den titel deines thread bei google eingegeben xD:
![]() mfg smallsmoker €: hier gibt es das ganze in einer extra unit und mit einer prozedur:) ![]() |
Re: CPU Auslastung auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
|
Re: CPU Auslastung auslesen
Hi, ich hab mir jetzt die Units / Komponenten meiner Vorposter nicht angesehen, aber falls nicht, ich hatte vor Jahren mal ein ähnliches Projekt und kam zu dem Schluß, wenn ich die CPU Usage ermitteln will, währe es von Vorteil, das in einem seperaten Thread zu machen, weil ewig beim Aufruf in meiner Anwendung sich diese eingefroren hatte...
Kuckst Du hier: ![]() |
Re: CPU Auslastung auslesen
Zitat:
Delphi-Quellcode:
[edit=Matze][delphi]-Tags gesetzt. MfG, Matze[/edit]
const
SystemBasicInformation = 0; SystemPerformanceInformation = 2; SystemTimeInformation = 3; 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; var NtQuerySystemInformation: function(infoClass: DWORD; buffer: Pointer; bufSize: DWORD; returnSize: TPDword): DWORD; stdcall = nil; liOldIdleTime: LARGE_INTEGER = (); liOldSystemTime: LARGE_INTEGER = (); 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; while not bLoopAborted do begin // 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; // wait one second Sleep(1000); end; end; procedure TForm1.Button1Click(Sender: TObject); begin GetCPUUsage end; |
Re: CPU Auslastung auslesen
Habe den Fehler gefunden, hatte eine Type Deklaration die im Standardforumlar vorhanden ist. Nun funktioniert es. Danke für die Hilfe.
Gruß Daniel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz