AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CPU-Auslastung eines Prozesses

Ein Thema von ustra · begonnen am 4. Nov 2003 · letzter Beitrag vom 8. Nov 2003
Antwort Antwort
Seite 1 von 3  1 23      
ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#1

CPU-Auslastung eines Prozesses

  Alt 4. Nov 2003, 15:35
Hallo,

ich habe schon gesucht, konnte aber nichts zu dem Thema finden.

Was ich gerne haben möchte: Ich möchte mit einem Programm die CPU-Auslastung eines mir namentlich bekannten Prozesses ermitteln. Am besten wäre es, wenn eine Methode mir einen Wert zurückliefert, wie es im Windows Task Manager steht.

Noch mal zum Sinn und Zweck: Mit einem Programm lasse ich eine Autodesk-Zeichnung erstellen. Dazu starte ich den Mechanical Desktop (der immer etwas länger braucht zum Laden). Ich will nun mit Tastatureigaben Befehle ausführen in Mechanical Desktop. Dazu muss Mechanical Desktop komplett geladen sein. Das will ich an der CPU-Auslastung des Prozess erkennen. Das Verhalten habe ich auch mit dem Task Manager schon beobachtet und wird auch klappen.

Nun brauche ich halt dazu einen Code. Hat von Euch vielleicht jemand so einen Code parat bzw. ist das überhaupt möglich, das auszulesen? Ich selber habe von diesem Bereich nun keine Ahnung. Es wäre echt nett von Euch, wenn Ihr mir helfen könntet.

Beste Grüße und Vielen Dank für Eure Bemühungen
Ulrich
Ulrich Strauer
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#2

Re: CPU-Auslastung eines Prozesses

  Alt 4. Nov 2003, 15:53
Hallo Ulrich,

mithilfe der Win32-API-Funktion GetProcessTimes kannst Du die Gesamt(Kernel-)Zeit gkt eines Prozesses ermitteln. Wenn Du nun diese Funktion zweimal innerhalb des Zeitraums t aufrufst, sollte (gkt2-gkt1)/t das gewünschte Ergebnis liefern.

Willst Du die Zeit gegen die anderen Prozesse vergleichen, solltest Du Dir CreateToolhelp32Snapshot, Process32First, Process32Next, etc. ansehen.

Zugegeben, nicht wirklich elegant.
gruß, choose
  Mit Zitat antworten Zitat
ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#3

Re: CPU-Auslastung eines Prozesses

  Alt 5. Nov 2003, 15:31
Hallo choose,

nur mal eine Verständnis Frage von mir: Gibt die Kernel Zeit an, wie lange der Prozessor für diesen Prozess Befehle ausführt oder worauf bezieht sich diese Angabe?

Dann noch mal eine zusätzliche Frage: Ich brauche für diese Methode das Handle des Prozesses. Dazu möchte ich gerne die Funktion getProcId von Code-Library verwenden und umschreiben. Nun wollte ich gerne die Methoden und Eigenschaften des Typs TProessEntry32 ansehen. leider hat meine D5 Hilfe dafür noch keinen Eintrag. Wo finde ich eine Übersicht zu solchen Themen, die meine D5 Hilfe nicht hat?

Beste Grüße
Ulrich
Ulrich Strauer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: CPU-Auslastung eines Prozesses

  Alt 5. Nov 2003, 15:33
Beides kannst du hier: http://msdn.microsoft.com/library/default.asp nachschlagen. Bei dem Datentyp nur das "T" weglassen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#5

Re: CPU-Auslastung eines Prozesses

  Alt 5. Nov 2003, 15:36
Hallo Luckie,

danke für den Tipp insbesondere mit dem "T". Da wäre ich bestimmt als Delphi Progger drauf reingefallen.

Beste Grüße
Ulrich
Ulrich Strauer
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: CPU-Auslastung eines Prozesses

  Alt 5. Nov 2003, 23:05
Hallo Ulrich,

falls Du die Dinge offline (leider oft nicht ganz so ausführlich wie beim msdn) lesen möchtest, verweise ich auf die MS SDK Help Files und hier auf die Borland Shared\MSHelp\WIN32.HLP. Diese Dateien sollte bei Deiner D5-Version installiert und auch in die IDE integriert worden sein, so dass Du, mit dem Cursor über einer Funktion wie Process32Next stehend, mit F1 die entsprechende Seite angezeigt bekommen solltest.

Beim BDN gibt es auch irgendwo ein Update dieser Dateien...
gruß, choose
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: CPU-Auslastung eines Prozesses

  Alt 5. Nov 2003, 23:09
Moin Choose,

oder man geht in die Vollen, und lädt sich bei MS das PSDK runter (allerdings ca. 350 MB Download für Vollinstallation).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#8

Re: CPU-Auslastung eines Prozesses

  Alt 6. Nov 2003, 17:07
Offline brauche ich das nicht. Ich habe DSL mit Flat und deswegen brauche ich das net. Aber danke für den Hinweis.

Den Trick mit F1 kenne ich schon. Ich habe halt nur eine veraltete Hilfe in der Hinsicht. Ich müßte mal bei Borland suchen, ob ich da etwas entsprechendes finde. Das wäre dann natürlich auch klasse.

Ulrich
Ulrich Strauer
  Mit Zitat antworten Zitat
ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#9

Re: CPU-Auslastung eines Prozesses

  Alt 7. Nov 2003, 18:44
Hallo,

ich brauche nun noch mal Eure Hilfe:

Ich starte meinen Prozess mit ShellexecuteEx und erhalte darüber das Handle auf den Prozess (funktioniert ohne Probleme). Nun will ich die CPU-Auslastung anzeigen lassen. Dazu rufe ich erst mal zu Testzwecken die Funktion getProcesstimes so auf:

Delphi-Quellcode:

Var
 CreateTime : TFileTime;
 KernelTime : TFileTime;
 UserTime : TFileTime;
 ExitTime : TFileTime;

 Function FileTimeToLocalDateTime(Time : TFileTime) : TDatetime;
 Var
   SysTime : TSystemTime;
 Begin
   FileTimeToLocalFileTime(Time,Time);
   FileTimeToSystemTime(Time, SysTime);
   Result := SystemTimeToDateTime(SysTime);
 End;

 Function FileTimeToDateTime(Time : TFileTime) : TDatetime;
 Var
   SysTime : TSystemTime;
 Begin
   FileTimeToSystemTime(Time, SysTime);
   Result := SystemTimeToDateTime(SysTime);
 End;

begin
//handle2 ist das ermittelte handle mit shellexecuteex
  GetProcessTimes(handle2,CreateTime,ExitTime,KernelTime,Usertime);
  LabelCreate.Caption := DateTimeToStr(FileTimeToLocalDateTime(CreateTime));
  LabelExit.Caption := DateTimeToStr(FileTimeToLocalDateTime(ExitTime));
  LabelKernel.Caption := TimeToStr(FileTimeToDateTime(KernelTime));
  LabelUser.Caption := TimeToStr(FileTimeToDateTime(UserTime));
end;
Er zeigt mir auch alle Werte richtig an bis auf den Wert KernelTime: Da steht immer 00:00:00 und es ändert sich auch nichts daran. Ich rufe das alles mit einem Timmer alle 50msek. auf. Ich rufe ein Programm auf, dass die CPU alle regelmößig auslastet (alle 6 sek., Fibonucci Algorithmus).

Ich habe noch nicht den Vergleich über einen Zeitram vorgenommen, weil es momentan meiner Ansicht nach keinen Sinn macht.

Beste Grüße
Ulrich
Ulrich Strauer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: CPU-Auslastung eines Prozesses

  Alt 7. Nov 2003, 19:02
Hm, dann wird dein Programm keinen Code im Kernel-Modus ausführen, sondern ausschließlich im User-Mode arbeiten. Oder berechnest du die zahlen mit irgendwelchen Kernel-Funktionen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:42 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