AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Durch eigenen Prozess verursachte CPU-Auslastung bekommen???
Thema durchsuchen
Ansicht
Themen-Optionen

Durch eigenen Prozess verursachte CPU-Auslastung bekommen???

Ein Thema von romber · begonnen am 24. Mai 2005 · letzter Beitrag vom 25. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Durch eigenen Prozess verursachte CPU-Auslastung bekommen???

  Alt 24. Mai 2005, 20:31
Hallo!

Wie man die aktuelle CPU-Aulastung erhält, haben Matze und eigene Teilnemer bereits mehrmals beschrieben. Gibt es auch eine Möglichkeit, die CPU-Auslastung der einzelnen Prozesse zu bekommen, zum Beispiel die des eigenen Prozesses? Das wäre schön!

Mindestens einen Beitrag gab's bereits zu diesem Thema, hier:
CPU auslastung der einzelnen Prozesse

Zitat von supermuckl:
Stichwort Perfmon ( Performance Monitor )
Ist eine API Schnittstelle wo du auf die Counters von Windows zugreifen kannst. Darunter fallen auch alle Prozesse und ihre Messwerte/Statistiken an. Entsprechende Perfmon Komponenten für Delphi gibt es. Habe selbst eine schon ausprobiert.
Aber was für Komponenten meinte supermuckl und wo finde ich diese?

Danke!
  Mit Zitat antworten Zitat
24. Mai 2005, 20:32
Dieses Thema wurde von "Luckie" von "Object-Pascal / Delphi-Language" nach "Windows API / MS.NET Framework API" verschoben.
WinAPI Frage.
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#3

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 24. Mai 2005, 21:47
wenn es nur um den CPU-Load des eigenen Processes geht, ist dies sehr einfach:
Delphi-Quellcode:
var
  LastTick : LongWord;
  LastTime : Int64;
  CPUCount : Word;


// einmal initialisieren:

Var
  CreationTime,
  ExitTime,
  KernelTime,
  UserTime : TFILETIME;
  SystemInfo : TSystemInfo
Begin
  LastTick:=GetTickCount();

  GetProcessTimes(GetCurrentProcess(),CreationTime,ExitTime,KernelTime,UserTime);
  LastTime:=Int64(KernelTime) + Int64(UserTime);

  GetSystemInfo(SystemInfo);
  CPUCount:=SystemInfo.dwNumberOfProcessors;


// periodisch aufrufen (z.B. jede Sekunde):

Var
  CreationTime,
  ExitTime,
  KernelTime,
  UserTime : TFILETIME;
  TickDelta : LongWord;
  TimeDelta : Int64;
begin
  TickDelta:=GetTickCount() - LastTick;
  Inc(LastTick,TickDelta);

  GetProcessTimes(GetCurrentProcess(),CreationTime,ExitTime,KernelTime,UserTime);
  TimeDelta:=(Int64(KernelTime) + Int64(UserTime)) - LastTime;
  Inc(LastTime,TimeDelta);

  Label.Caption:=Format('CPU load: %.1f %%',[TimeDelta / 10000 / CPUCount / TickDelta * 100]);
PS: ev. wäre dies etwas für die Codelib, da diese Frage immer wieder kommt......
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 24. Mai 2005, 21:49
Und für alle anderen Prozesse
GetProcessTimes(GetCurrentProcess(),CreationTime,ExitTime,KernelTime,UserTime); als ersten Parameter eben die ProzessID abgeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#5

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 24. Mai 2005, 22:41
Zitat von Luckie:
Und für alle anderen Prozesse
GetProcessTimes(GetCurrentProcess(),CreationTime,ExitTime,KernelTime,UserTime); als ersten Parameter eben die ProzessID abgeben.
GetProcessTimes() erwartet ein Process-Handle (nicht ID)...
GetCurrentProcess() liefert ein Pseudo-Handle des gegenwärtigen Prozesses... dementsprechend mittels OpenProcess() den Handle des fremden Prozesses holen...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 24. Mai 2005, 22:47
OK, knapp da neben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#7

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 24. Mai 2005, 23:24
"Knapp daneben ist auch vorbei..."
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#8

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 25. Mai 2005, 01:14
Danke für schnelle Antwort!

Kann man die Kode von Basilikum in einen Thread packen? Ich versuche es jetzt gerade, klappt aber nicht so richtig. An dieser Zeile

Form1.Label1.Caption := Format('CPU load: %.1f %%',[TimeDelta / 10000 / CPUCount / TickDelta * 100]); bricht es ab mit der Fehlermeldung:
Invalid floating pointer operation.

Woran liegt es?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 25. Mai 2005, 01:29
1. Gibt der Code van Basilikum an wie viel CPU-Zeit der Prozess verbraucht und nicht die Auslastung in Prozent.
MSDN-Library durchsuchenGetProcessTimes
Zitat:
lpKernelTime
[out] Pointer to a FILETIME structure that receives the amount of time that the process has executed in kernel mode. The time that each of the threads of the process has executed in kernel mode is determined, and then all of those times are summed together to obtain this value.
lpUserTime
[out] Pointer to a FILETIME structure that receives the amount of time that the process has executed in user mode. The time that each of the threads of the process has executed in user mode is determined, and then all of those times are summed together to obtain this value.
2. Wenn du die TThread Klasse benutzt darfst du nur mit der Synchronize Methode auf VCL Objekte einer Form zugreifen
3. Überprüf mal die Inahlte der variablen, was darin steht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#10

Re: Durch eigenen Prozess verursachte CPU-Auslastung bekomme

  Alt 25. Mai 2005, 07:54
Zitat von Luckie:
1. Gibt der Code van Basilikum an wie viel CPU-Zeit der Prozess verbraucht und nicht die Auslastung in Prozent.
MSDN-Library durchsuchenGetProcessTimes
Zitat:
lpKernelTime
[out] Pointer to a FILETIME structure that receives the amount of time that the process has executed in kernel mode. The time that each of the threads of the process has executed in kernel mode is determined, and then all of those times are summed together to obtain this value.
lpUserTime
[out] Pointer to a FILETIME structure that receives the amount of time that the process has executed in user mode. The time that each of the threads of the process has executed in user mode is determined, and then all of those times are summed together to obtain this value.
1. stimmt nicht: GetProcessTimes liefert tatsächlich "nur" die verbratene CPU-Zeit... diese wird jedoch mit der Division durch die verstrichenen Ticks mit der "echten" Zeit in Relation gebracht, und ergibt so den prozentualen Anteil der Zeit, die der Process während der letzen Berechnungsperiode tatsächlich den CPU beansprucht hat... bei CPU-Zeit = verstrichene Ticks => 100%, bei CPU-Zeit = 0 => 0%
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 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