Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать время исполнения программы ? [D7, WinXP]


Фёдор ©   (2005-02-09 11:44:00) 

В миллисекундах.

Нужно для сравнения быстродействия двух прог.


Anatoly Podgoretsky   (2005-02-09 22:12:00) [1]

Ты вроде еще не ругался, зачем тебя в ро


Фёдор   (2005-02-09 16:13:00) [2]

kaZaNoVa
твоим методом у меня в p постоянно 0 ..


Digitman   (2005-02-09 12:13:00) [3]

GetProcessTimes


ЮЮ   (2005-02-09 11:53:00) [4]

так у него уже проги. Как тут поработаешь?


kaZaNoVa   (2005-02-09 11:53:00) [5]

[2][3] извинуюсь за немного "корявый"  код - но писал давно, работает))))
думаю, в основном идея понятна))


kaZaNoVa   (2005-02-09 11:52:00) [6]

чужой:

program Project1;
{$APPTYPE CONSOLE}
{$I-}
uses
 Windows;

Var
f:TextFile;
si:STARTUPINFO;
pi:PROCESS_INFORMATION;
cmdline:string;
p:cardinal;
ProcessID         : DWORD;
 ProcessHandle     : THandle;
 ThreadHandle      : THandle;

begin
UseInputOutput;
ProcessID := GetCurrentProcessID;
ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION, False, ProcessID);
SetPriorityClass(ProcessHandle,  REALTIME_PRIORITY_CLASS);
ThreadHandle := GetCurrentThread;
SetThreadPriority(ThreadHandle,  THREAD_PRIORITY_TIME_CRITICAL);
CloseHandle(ProcessHandle);

ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);

cmdline:='cmd.bat';

p:=gettickcount;

  if not CreateProcess( nil, // No module name (use command line).
      PChar(cmdline),  // Command line.
      nil,             // Process handle not inheritable.
      nil,             // Thread handle not inheritable.
      False,           // Set handle inheritance to FALSE.
      0,               // No creation flags.
      nil,             // Use parent's environment block.
      nil,             // Use parent's starting directory.
      si,              // Pointer to STARTUPINFO structure.
      pi )             // Pointer to PROCESS_INFORMATION structure.
     then
      begin
       Writeln( 'CreateProcess failed.' );
       Readln;
       Exit;
      end;
  WaitForSingleObject( pi.hProcess, INFINITE );
  Writeln((gettickcount-p));
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
//Writeln('Press Enter Key !');
AssignFile(f,'Result.txt');
Append(f);
if IOResult<>0 then begin
CloseFile(f);
RewRite(f);
end;

Writeln(f,(gettickcount-p));
CloseFile(f);
Sleep(750);
end.


kaZaNoVa   (2005-02-09 11:49:00) [7]

своей:
Var k,n,h,p:int64;

procedure taimer(a:boolean);
Begin
if a then begin
p:=gettickcount; QueryPerformanceFrequency(h); QueryPerformanceCounter(k);
end else begin
QueryPerformanceCounter(n);
MessageBox(0,'Ready',Pchar(Inttostr(gettickcount-p)+' ms    ('+(Inttostr(round(1000000*(n-k)/h)))+') microsec'),0);
end;end;

begin
taimer(true);

//тут работаем .. )))

taimer(false);


ЮЮ   (2005-02-09 11:48:00) [8]

Если разница измеряется в милисекундах, то какая разница ? :)

Заставь их работать на больших объемах данных, чтобы с секундомером можно было засечь время


Наверх

Титульная страница Поиск, карта сайта Написать письмо