![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать время исполнения программы ? [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]Если разница измеряется в милисекундах, то какая разница ? :)
Заставь их работать на больших объемах данных, чтобы с секундомером можно было засечь время