![]() |
CPU Auslastung einzelner Prozesse
Mit diesen Funktionen errechnet man anhand der ProcessID die CPU Auslastung eines Prozesses. Die ProzessIDs müssen natülich vorher ermittelt werden.
Delphi-Quellcode:
Anwendungsbeispiel:
// Datensatz für die CPU Auslastung
// Hier werden die Zeitwerte des Prozesses gespeichert type TCPULOAD = record PID : Integer; dwOldTime, dwNewTime : Cardinal; lOldUser, lNewUser : Cardinal; lOldKernel, lNewKernel : Cardinal; end; var Process : TCPULOAD; function GetTime(fFileTime: FileTime): Cardinal; var sSystemTime : SystemTime; begin FileTimeToSystemTime(fFileTime,sSystemTime); result := (sSystemTime.wSecond*1000)+sSystemTime.wMilliseconds; end; // aktualisiert Zeitwerte im Datensatz des Prozesses procedure RefreshProcess(var Process: TCPULOAD); var hProc : THandle; ftCreate, ftExit, ftUser, ftKernel : FileTime; begin ZeroMemory(@ftUser, SizeOf(ftUser)); ZeroMemory(@ftUser, SizeOf(ftKernel)); Process.dwOldTime := Process.dwnewTime; Process.lOldUser := Process.lNewUser; Process.lOldKernel := Process.lNewKernel; hProc := OpenProcess(PROCESS_QUERY_INFORMATION, False, Process.PID); if (hProc <> 0) then begin GetProcessTimes(hProc, ftCreate, ftExit, ftKernel, ftUser); Process.dwNewTime := GetTickCount; Process.lNewUser := GetTime(ftUser); Process.lNewKernel := GetTime(ftKernel); end; CloseHandle(hProc); end; function GetCPUTimeForProcess(Process: TCPULOAD): Integer; var lUser, lKernel: Cardinal; dwTime: DWORD; begin lKernel := Process.lNewKernel - Process.lOldKernel; lUser := Process.lNewUser - Process.lOldUser; dwTime := Process.dwNewTime - Process.dwOldTime; if (dwTime > 0) then Result := ((lKernel+lUser)*100) div (dwTime) else Result := 0; end;
Delphi-Quellcode:
Bevor RefreshProcess ausgeführt wird, müssen die alten Zeitwerte auf null gesetzt werden, damit bei neuen Prozessen keine ungültigen Werte herauskommen.
Process.PID := { gültige PID hier eintragen };
// Zeitwerte müssen auf null gesetzt werden Process.lNewKernel := 0; Process.lNewUser := 0; Process.dwNewTime := 0; // speichert die aktuellen Zeitwerte im Datensatz RefreshProcess(Process); Label1.Caption := IntToStr(GetCPUTimeForProcess(Process)) +'%'; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 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