![]() |
Windows-Pendant zu time-Befehl unter Linux
Hallo,
unter Linux ist es ja möglich, eine Anwednung oder einen Prozess per time-Befehl zu starten, um nach Ablauf des Programms die tatsächliche Rechenzeit zu bekommen. Gibt es soetwas auch unter Windows ? |
Re: Windows-Pendant zu time-Befehl unter Linux
Nein, so weit ich weiß nicht. Ist aber trivial zu implementieren:
Delphi-Quellcode:
Im Endeffekt startest Du den Prozess, fragst den aktuellen TickCount (Anzahl der vergangenen Millisekunden seit Systemstart), wartest bis die Anwendung fertig ist und subtrahierst den ersten TickCount vom aktuellen. Ergebnis ist die Zeit in Millisekunden die die Anwendung zur Ausführung benötigt hat.
program Project1;
{$APPTYPE CONSOLE} uses Windows, ShellAPI; function ExecuteWaitAndTime(Filename, Params : string; var DeltaTime : cardinal) : boolean; var ExecuteInfo: TShellExecuteInfo; begin ZeroMemory(@ExecuteInfo, sizeof(ExecuteInfo)); with ExecuteInfo do begin cbSize := sizeof(ExecuteInfo); fMask := SEE_MASK_NOCLOSEPROCESS; lpVerb := 'open'; lpFile := PChar(Filename); lpParameters := PChar(Params); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@ExecuteInfo) then try result := true; DeltaTime := GetTickCount; WaitForSingleObject(ExecuteInfo.hProcess, INFINITE); DeltaTime := GetTickCount - DeltaTime; finally CloseHandle(ExecuteInfo.hProcess); end; end; var i : cardinal; begin writeln(ExecuteWaitAndTime('notepad.exe', '', i)); writeln(i); readln; end. Der Code oben basiert übrigens grob auf dem Code von Assarbad. Mags nur erwähnt wissen, nicht das einer rumschreit ich klau Code :P. |
Re: Windows-Pendant zu time-Befehl unter Linux
Das kann man nicht implementieren!
GetTickount kenne ich, ich möchte nicht wissen wieviel zeit vergeht, bis mein Prozess zuende gerechnet wurde, sondern die tatsächliche Rechenzeit, ohne die Rechenzeit der anderen laufenden Prozesse. |
Re: Windows-Pendant zu time-Befehl unter Linux
|
Re: Windows-Pendant zu time-Befehl unter Linux
Problem:
GetTickCount gibt die aktuelle Uhrzeit an, aber nicht die Zeit, die der Prozess tatsächlich verwendet. Luckie hat in einem ![]() Ein Beispiel wäre, wenn du Notepad mit niedrigster Priortät startest, und während der Ausführung startest du ein Intensives Programm, welches zu fast 100% deine CPU braucht: Ergebnis ist, dass Notepad weniger Rechenzeit bekommt. Und was ist wenn du Notepad gar nicht beachtest: Sozusagen starten, idlen und dann beenden: Kaum Rechenzeit verwendet, aber es ist Zeit vergangen. MfG xZise |
Re: Windows-Pendant zu time-Befehl unter Linux
Ach herje, ja. Asche auf mein Haupt. Habs komplett überlesen. Aber dann implementier ich Dir halt einfach mal, das was Du willst:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses Windows, ShellAPI; function ExecuteWaitAndTime(Filename, Params : string; var DeltaUserTime, DeltaKernelTime, DeltaExecutionTime : cardinal) : boolean; var ExecuteInfo: TShellExecuteInfo; CreationTime, ExitTime, KernelTime, UserTime : _FILETIME; begin ZeroMemory(@ExecuteInfo, sizeof(ExecuteInfo)); with ExecuteInfo do begin cbSize := sizeof(ExecuteInfo); fMask := SEE_MASK_NOCLOSEPROCESS; lpVerb := 'open'; lpFile := PChar(Filename); lpParameters := PChar(Params); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@ExecuteInfo) then try result := true; WaitForSingleObject(ExecuteInfo.hProcess, INFINITE); GetProcessTimes(ExecuteInfo.hProcess, CreationTime, ExitTime, KernelTime, UserTime); DeltaExecutionTime := (Int64(ExitTime) - Int64(CreationTime)) div 10000; DeltaUserTime := Int64(UserTime) div 10000; DeltaKernelTime := Int64(KernelTime) div 10000; finally CloseHandle(ExecuteInfo.hProcess); end else result := false; end; var ExecutionTime, UserTime, KernelTime : cardinal; begin writeln(ExecuteWaitAndTime('notepad.exe', '', UserTime, KernelTime, ExecutionTime)); writeln('Execution time: ', ExecutionTime); writeln('CPU time in user mode: ', UserTime); writeln('CPU time in kernel mode: ', KernelTime); readln; end. |
Re: Windows-Pendant zu time-Befehl unter Linux
Danke für den Hinweis, aber ich weiß wie Threads funktionieren ;). Hab halt einfach nur das Posting überflogen und das Rechen bei Rechenzeit überlesen ;).
|
Re: Windows-Pendant zu time-Befehl unter Linux
Zitat:
MfG xZise |
Re: Windows-Pendant zu time-Befehl unter Linux
Wow, Danke, werde ich gleich mal testen!
Wenn es sogar eine API-Funktion "GetProcessTimes" gibt, ist es doch gut möglich, dass es ddie Eingabeaufforderung auch kann, oder ? |
Re: Windows-Pendant zu time-Befehl unter Linux
Zitat:
Edit: Google spuckt unter anderem folgenden Fund aus, der für Dich recht interessant sein sollte: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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