[ Mzo @ 20.03.2004. 18:43 ] @
Kako da iz windows aplikacije pokrenem neku konzolnu aplikaciju i
da zatim vidim koliko je milisekundi proslo dok se ta konzolna aplikacija
nije izvrsila? To mi treba da bih testirao koliko se brzo izvrsava neki algoritam.
[ mnis @ 22.03.2004. 22:26 ] @
Hmm problem se moze rijesiti na vise nacina.
Mozes recimo tu console aplikaciju pokrenes koristeci CreateProcess() a zatim koristis WaitForSingleObject na hProcess handle da odredis kad se console aplikacije zavrsila. Onda ti jos ostaje da izmjeris proteklo vrijeme. Mogao bi posle CreateProcess poziva da kreiras thread koji ce da radi nesto kao
while(1)
{
Sleep(1);
msec++;
}

a posle WaitForSigleObject pozoves SuspendThread i procitas vrednost msec.
Metod nije 100% precizan ali moze posluziti :)
[ Rapaic Rajko @ 02.04.2004. 13:04 ] @
Koristi GetTickCount().

Rajko
[ morlic @ 11.04.2004. 22:54 ] @
Kao na primer:

Code:

Var t : longint;
begin
   t := GetTickCount;
   // Startovanje procesa i cekanje na kraj rada
   WinExecAndWait32('c:\program.exe', True);
   ShowMessage(Format('Vreme izvrsavanja je %d msec', [GetTickCount-t]));
end;


a kôd metoda za pokretanje i cekanje na proces je (Kôd je preuzet sa news-a, autor je Peter Below):

Code:

  function WinExecAndWait32(FileName:String; Visibility : integer):integer;
  var  { by Pat Ritchey }
    zAppName:array[0..512] of char;
    StartupInfo:TStartupInfo;
    ProcessInfo:TProcessInformation;
  begin
    StrPCopy(zAppName,FileName);
    FillChar(StartupInfo,Sizeof(StartupInfo),#0);
    StartupInfo.cb := Sizeof(StartupInfo);
    StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow := Visibility;
    if not CreateProcess(nil,
      zAppName,                      { pointer to command line string }
      nil,                           { pointer to process security 
attributes
}
      nil,                           { pointer to thread security attributes 
}
      false,                         { handle inheritance flag }
      CREATE_NEW_CONSOLE or          { creation flags }
      NORMAL_PRIORITY_CLASS,
      nil,                           { pointer to new environment block }
      nil,                           { pointer to current directory name }
      StartupInfo,                   { pointer to STARTUPINFO }
      ProcessInfo) then Result := -1 { pointer to PROCESS_INF }
    else
       begin
       WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
       GetExitCodeProcess(ProcessInfo.hProcess,Result);
       CloseHandle( ProcessInfo.hProcess );
       CloseHandle( ProcessInfo.hThread );
       end;
  end;