AGB  ·  Datenschutz  ·  Impressum  







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

CPU und Memory Nutzung eines Prozesses

Ein Thema von af99 · begonnen am 20. Mai 2015 · letzter Beitrag vom 21. Mai 2015
Antwort Antwort
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#1

AW: CPU und Memory Nutzung eines Prozesses

  Alt 20. Mai 2015, 13:41
GetProcessMemorySize gibt "Der an einen Systemaufruf übergebene Datenbereich ist zu klein" zurück.
...
ok " Rückgabewerte der aufgerufenen WinAPIs auswerten" Wie mach ich das?
Guck dir mal den GetProcessMemory-Aufruf an, der setzt vermutlich die oben genannte Fehlermeldung. Kompilierst du zufällig für 64bit? PROCESS_MEMORY_COUNTERS könnte dann eine andere Größe haben (wegen SIZE_T)
Die dynamische Speicherverwaltung (getMem/freeMem) ist an der Stelle auch völlig überflüssig, PROCESS_MEMORY_COUNTERS passt locker auf den Stack.

Auf jeden Fall gibt GetProcessMemory genau dann 0 zurück, wenn ein Fehler aufgetreten ist. Dann kannst du zum Beispiel eine Exception mit dem Errorcode werfen.
Analog bei allen anderen Systemaufrufen.
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#2

AW: CPU und Memory Nutzung eines Prozesses

  Alt 20. Mai 2015, 14:10
der Fehler in ShowMemoryUsage kommt hier
Delphi-Quellcode:
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId);
     begin
       if ( hProcess = 0 ) then
       begin
         WriteLn(SysErrorMessage(GetLastError));
         writeln('fehler');
         Exit;
       end;
das "SysErrorMessage(GetLastError));" bringt "Zugriff verweigert" in der Funktion GetCpuUsage benutze ich "h:=OpenProcess(PROCESS_QUERY_INFORMATION,false,PI D);" und ich bekomme keinen Fehler.
Delphi-Quellcode:
function GetCpuUsage(PID:cardinal):single;
const
    cWaitTime=750;
var
    h : Cardinal;
    mCreationTime,mExitTime,mKernelTime, mUserTime:_FILETIME;
    TotalTime1,TotalTime2:int64;
begin
     {We need to get a handle of the process with PROCESS_QUERY_INFORMATION privileges.}
    h:=OpenProcess(PROCESS_QUERY_INFORMATION,false,PID);
    {We can use the GetProcessTimes() function to get the amount of time the process has spent in kernel mode and user mode.}
    GetProcessTimes(h,mCreationTime,mExitTime,mKernelTime,mUserTime);
    TotalTime1:=int64(mKernelTime.dwLowDateTime or (mKernelTime.dwHighDateTime shr 32)) + int64(mUserTime.dwLowDateTime or (mUserTime.dwHighDateTime shr 32));

    {Wait a little}
    Sleep(cWaitTime);

    GetProcessTimes(h,mCreationTime,mExitTime,mKernelTime,mUserTime);
    TotalTime2:=int64(mKernelTime.dwLowDateTime or (mKernelTime.dwHighDateTime shr 32)) + int64(mUserTime.dwLowDateTime or (mUserTime.dwHighDateTime shr 32));

    {This should work out nicely, as there were approx. 250 ms between the calls
    and the result will be a percentage between 0 and 100}

    Result:=((TotalTime2-TotalTime1)/cWaitTime)/100;
    CloseHandle(h);
end;
der Fehler in "GetProcessMemorySize" kommt hier
Delphi-Quellcode:
  l_nWndHandle := FindWindow(nil, PChar(sProcessName));
  if l_nWndHandle = 0 then
  begin
    WriteLn(SysErrorMessage(GetLastError));
    writeln('fehler');
    Result := False;
    Exit;
  end;
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#3

AW: CPU und Memory Nutzung eines Prozesses

  Alt 20. Mai 2015, 14:15
Zitat:
Welchen Prozess versuchst du denn zu öffnen? Einen, der mit demselben Berechtigugnskontext läuft wie dein Programm? Oder den eines anderen Nutzers? Für letzteres braucht man Adminrechte.
diesen l_nWndHandle := FindWindow(nil, PChar(sProcessName));
dieser gibt 0 zutück
ich denke schon das das in dem selben Berechtigungskonzept passiert. Ist alles ein Programm in einer EXE und das läuft als Consolenprogramm. Die Console ist als Admin ausgeführt.
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#4

AW: CPU und Memory Nutzung eines Prozesses

  Alt 20. Mai 2015, 14:17
Zitat:
Kompilierst du zufällig für 64bit?
nein als 32 BIT
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#5

AW: CPU und Memory Nutzung eines Prozesses

  Alt 20. Mai 2015, 14:29
Warum kommt keiner auf die idee und vergleicht die beiden Aufrufe?
Vorallem wenn man sich schon wundert warum das Eine geht und das Andere nicht.

Delphi-Quellcode:
OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId);
OpenProcess(PROCESS_QUERY_INFORMATION, False, PID)
Und, was fällt auf?


Für gewisse Aktionen braucht man bestimmte Rechte und wenn man die nicht hat, dann wird Einem das halt verweigert,
vorallem wenn man Leserechte auf den Arbeitsspeicher einer fremden Anwendung anfordert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#6

AW: CPU und Memory Nutzung eines Prozesses

  Alt 20. Mai 2015, 14:50
ich habe beides bei beiden Funktioenen ausprobiert. Es kommt immer der gleiche Fehler. Zumal in der Funktion "GetProcessMemorySize" der Fehler bei
Delphi-Quellcode:
l_nWndHandle := FindWindow(nil, PChar(sProcessName));
  if l_nWndHandle = 0 then
  begin
    WriteLn(SysErrorMessage(GetLastError));
auftritt. Also schon bevor das "OpenProcess(PROCESS_QUERY_INFORMATION" ausgerufen wird.

Zitat:
Für gewisse Aktionen braucht man bestimmte Rechte und wenn man die nicht hat, dann wird Einem das halt verweigert,
vorallem wenn man Leserechte auf den Arbeitsspeicher einer fremden Anwendung anfordert
klar verstehe ich. Das VCL Programm darf ja scheinbar alles da es die Werte anzeigt. Ich verstehe den Unterschied nicht
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#7

AW: CPU und Memory Nutzung eines Prozesses

  Alt 20. Mai 2015, 15:56
Warum gibst du FindWindow einen Prozessnamen, wenn es laut MSDN einen Klassen- und einen Fensternamen (Fenstertitel) erwartet?

MfG Dalai
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#8

AW: CPU und Memory Nutzung eines Prozesses

  Alt 20. Mai 2015, 16:00
GetConsoleWindow:
https://stackoverflow.com/questions/...ui-application
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:13 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