AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Windows-Pendant zu time-Befehl unter Linux
Thema durchsuchen
Ansicht
Themen-Optionen

Windows-Pendant zu time-Befehl unter Linux

Ein Thema von MrKnogge · begonnen am 12. Apr 2008 · letzter Beitrag vom 14. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#1

Windows-Pendant zu time-Befehl unter Linux

  Alt 12. Apr 2008, 20:20
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 ?
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#2

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 12. Apr 2008, 20:44
Nein, so weit ich weiß nicht. Ist aber trivial zu implementieren:

Delphi-Quellcode:
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.
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.

Der Code oben basiert übrigens grob auf dem Code von Assarbad. Mags nur erwähnt wissen, nicht das einer rumschreit ich klau Code .
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 12. Apr 2008, 21:15
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.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 12. Apr 2008, 21:19
MSDN-Library durchsuchenGetProcessTimes
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 12. Apr 2008, 21:19
Problem:
GetTickCount gibt die aktuelle Uhrzeit an, aber nicht die Zeit, die der Prozess tatsächlich verwendet.
Luckie hat in einem Hier im Forum suchenThread-Tutorial glaub ich geschrieben, wie man die Rechnenzeit des Prozesses bekommt.

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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#6

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 12. Apr 2008, 22:10
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.
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#7

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 12. Apr 2008, 22:12
Zitat von xZise:
Problem:
GetTickCount gibt die aktuelle Uhrzeit an, aber nicht die Zeit, die der Prozess tatsächlich verwendet.
Luckie hat in einem Hier im Forum suchenThread-Tutorial glaub ich geschrieben, wie man die Rechnenzeit des Prozesses bekommt.
Danke für den Hinweis, aber ich weiß wie Threads funktionieren . Hab halt einfach nur das Posting überflogen und das Rechen bei Rechenzeit überlesen .
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 12. Apr 2008, 23:00
Zitat von wido:
Zitat von xZise:
Problem:
GetTickCount gibt die aktuelle Uhrzeit an, aber nicht die Zeit, die der Prozess tatsächlich verwendet.
Luckie hat in einem Hier im Forum suchenThread-Tutorial glaub ich geschrieben, wie man die Rechnenzeit des Prozesses bekommt.
Danke für den Hinweis, aber ich weiß wie Threads funktionieren . Hab halt einfach nur das Posting überflogen und das Rechen bei Rechenzeit überlesen .
Es ging da nicht darum wie Threads funktionieren. Naja ^^ Nicht ganz Es ging darum, aber ich meinte, dass dort stand wie man die Rechenzeit des Threads ermittelt.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 13. Apr 2008, 11:21
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 ?
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#10

Re: Windows-Pendant zu time-Befehl unter Linux

  Alt 13. Apr 2008, 16:17
Zitat von MrKnogge:
Wenn es sogar eine API-Funktion "GetProcessTimes" gibt, ist es doch gut möglich, dass es ddie Eingabeaufforderung auch kann, oder ?
Hm, nicht das ich wüsste. Allerdings ist es gut möglich, daß jemand time portiert hat. Aber ganz ehrlich ... es wäre trivial den Source oben umzuändern in einen Consolen Befehl. Statt Notepad.exe und leere Parameterliste einfach die Parameter die der Anwendung übergeben wurden einsetzen.

Edit:
Google spuckt unter anderem folgenden Fund aus, der für Dich recht interessant sein sollte:
http://channel9.msdn.com/ShowPost.aspx?PostID=356650
  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 20:50 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