| Autor |
Beitrag |
Harry M.
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Sa 13.08.05 18:34
Kennt jemand eine Function zum ermitteln der CPU-Auslastung einzelner Prozesse?
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Sa 13.08.05 18:51
ich glaub du bist schon lang genu hier um zu weissen das man vorher die suche verwenden soll
ich hab eben nach "CPU Aulastung gesucht" und die lösung gefunden
da du zu faul warst werd ich dir das aber net sagen
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
Harry M. 
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Sa 13.08.05 18:53
Ich habe über 3 Stunden gesucht!!! Es geht aber immer nur darum wie man die gesamte Auslastung ermittelt. Die einzelner Prozesse wurde nie abschliessend geklärt.
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Sa 13.08.05 19:19
schwachsinn mein fehler
ich weiß das es nen thread schonmal gab, wenn bei DP angemedlet bist such mal da
www.delphipraxis.net...light=cpu+auslastung
villeicht hilft dir das weiter
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
Harry M. 
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Sa 13.08.05 19:24
Ne will ich nicht. Und ich finde es auch nach Deiner Beschreibung nicht. Hab ich was mit den Augen?? Poste doch mal bitte den Direktlink.
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
Harry M. 
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Sa 13.08.05 19:26
Habe ich mir angesehen. Wie ich da aber an die Auslastung einzelner Processe komme will mir nicht einleuchten.
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 14.08.05 23:15
In dem du dir das Programm von Olli mal anguckst.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: So 14.08.05 23:21
Luckie hat folgendes geschrieben: | | In dem du dir das Programm von Olli mal anguckst. |
wobei bei der fertig kompilierten exe von olli aka assarbad keine cpu-last zu sehen ist o0
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 14.08.05 23:28
Ich habe mich da auf die Aussage von GoP verlassen. 
|
|
Harry M. 
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Mo 15.08.05 02:15
@Luckie Du müssets mich doch schon so gut kennen das Du weißt, das ich das getan habe - es will aber nicht. Was ich zustande gebracht habe hänge ich mal dran aber das pe32.cntUsage gibt nicht den richtigen wert zurück.
Einloggen, um Attachments anzusehen!
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.08.05 02:38
Weil vntusage nicht die Prozessauslastung ist:
| PSDK hat folgendes geschrieben: |
cntUsage
Number of references to the process. A process exists as long as its usage count is nonzero. As soon as its usage count becomes zero, a process terminates.
|
Delphi-Quelltext 1: 2:
| hKernel := GetModuleHandle('KERNEL32.DLL'); |
Warum wohl? Weil die DLL elementare Funktionen bereitstellt, ohne die ein Prozess nicht erzeugt werden kann. Der rsets ieht auch ziemlcih abenteuerlich aus:
Delphi-Quelltext 1: 2: 3: 4: 5:
| IF BOOL(hKernel) THEN BEGIN @CreateToolhelp32Snapshot := GetProcAddress(hKernel, 'CreateToolhelp32Snapshot'); @Process32First := GetProcAddress(hKernel, 'Process32First'); @Process32Next := GetProcAddress(hKernel, 'Process32Next'); END; |
Warum der Cast nach BOOL? Wie wäre es mit: if hKernel <> 0 then Und warum lädst du die dynamisch im Code? Hat das einen Grund? Ist doch schon alles in der TlHelp32.pas deklariert und importiert.
Delphi-Quelltext 1:
| if hProcessSnap = DWORD(-1) then exit; |
Es gibt auch eine Konstante für diesen Ausdruck: INVALID_HANDLE_VALUE.
Delphi-Quelltext 1:
| pe32.dwSize := sizeof(tagPROCESSENTRY32); |
Ein ZeroMemory(@pe32, sizeof(tagProcessEntry32)); davor könnte auch nicht schaden.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| function TransPri(I: Integer): string; begin RESULT := 'Normal';
case I of 11: RESULT := 'Hoch'; end; end; |
Es gibt mehr als zwei Prozessprioritäten.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| procedure GetProcessInfo(ProcList: TListView); var hProcessSnap : DWORD; pe32 : TProcessEntry32; noerr : bool; S : string; ProcessHandle : THandle; begin hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hProcessSnap <> INVALID_HANDLE_VALUE then begin ZeroMemory(@pe32, sizeof(tagProcessEntry32)); pe32.dwSize := sizeof(tagPROCESSENTRY32); noerr := Process32First(hProcessSnap, pe32); while noerr do begin ProcList.Items.Add.Caption := pe32.szExeFile; ProcList.Items.Item[ProcList.Items.Count - 1].SubItems.Add(IntToStr(pe32.th32ProcessID)); ProcList.Items.Item[ProcList.Items.Count - 1].SubItems.Add(IntToStr(pe32.cntUsage)); ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pe32.th32ProcessID); S := ' '; if ProcessHandle <> 0 then begin SetLength(S, MAX_PATH); SetLength(S, GetModuleFileNameEx(ProcessHandle, 0, PChar(S), Length(S))); CloseHandle(ProcessHandle); end; ProcList.Items.Item[ProcList.Items.Count - 1].SubItems.Add(S); ProcList.Items.Item[ProcList.Items.Count - 1].SubItems.Add(IntToStr(pe32.cntThreads)); ProcList.Items.Item[ProcList.Items.Count - 1].SubItems.Add(TransPri(pe32.pcPriClassBase)); noerr := Process32Next(hProcessSnap, pe32); end; CloseHandle(hProcessSnap); end; end; |
Davon mal abgesehen, würde ich den Code sowieso von der GUI trennen.
Siehe dazu: www.luckie-online.de...es/Prozessliste.html
und
www.luckie-online.de...ocList_KillProc.html
|
|
Harry M. 
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Mo 15.08.05 04:25
Der Code der DIr ao abendteulich anmutet ist nicht mal von mir  ist von Olli. Und ich weis auch, das es mehr als 2 Prioritäten gibt. Das was ich hochgeladen habe war nur ein kleines Beispielprogramm womit ich grad versuche das rauszukriegen.
Wenn cntUsage das nicht die Auslastung ist, wie kann ich sie denn damm ermitteln?
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.08.05 10:26
Harry M. hat folgendes geschrieben: | Der Code der DIr ao abendteulich anmutet ist nicht mal von mir ist von Olli. |
Wenn wir den gleichen Olli meinen, kann ich das nicht so ganz glauben. Der hätte bestimmt nicht den Code derartiug mit der GUI verknüpft.
|
|
Harry M. 
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Mo 15.08.05 10:28
nein ich rede von dem hier Delphi-Quelltext 1: 2: 3: 4: 5:
| IF BOOL(hKernel) THEN BEGIN @CreateToolhelp32Snapshot := GetProcAddress(hKernel, 'CreateToolhelp32Snapshot'); @Process32First := GetProcAddress(hKernel, 'Process32First'); @Process32Next := GetProcAddress(hKernel, 'Process32Next'); END; |
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.08.05 10:32
Ja das kann sein, aber dann hat er bestimmt nicht die Units eingebunden.
|
|
Harry M. 
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Mo 15.08.05 10:34
Ne.
_________________ Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
|
|