Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.23;
Скачать: CL | DM;

Вниз

Скорость выполнения процедуры   Найти похожие ветки 

 
DNT   (2003-12-11 16:54) [0]

Подскажите как посчитать скорость выполнения процедуры, в милесекундах например.

Заранее спасибо ;)


 
Jel   (2003-12-11 16:55) [1]

GetTickCount до и после.


 
DNT   (2003-12-11 16:55) [2]

P.S. Я не знаю как время получить, более точное чем секунда.
В этом вся загвоздка.


 
panov   (2003-12-11 19:48) [3]

Help-->Windows SDK-->GetTickCount


 
Александр из Минска   (2003-12-11 21:02) [4]

ПОпробуй так: (у меня показывает милисеки, но я не уверен)
var
i : Integer;
bt : TDateTime;
h, m, s, ms : Word;
begin
bt := Time;
for i := 1 to 100000000 do
begin
end;
DecodeTime(Time-bt, h, m, s, ms);
ShowMessage(IntToStr(ms));
end;


 
panov   (2003-12-11 21:16) [5]

Если сложно разобраться, то вот пример...
unit uTimer;

interface

uses
Classes,windows,Messages,forms;

const
WM_FTIMER = WM_USER+10000;

type
TFTimer = class(TThread)
hParent: Thandle;
FInterval: Integer;
private
Exists: Boolean;
STime: Int64;
CTime: Int64;
StartTime : Double;
ClockRate : Double;
protected
procedure Execute; override;
public
function StartTimer : Boolean;
function ReadTimer : Double;
constructor Create(aParentHandle: THandle;aInterval: Integer);
end;

implementation

constructor TFTimer.Create(aParentHandle: THandle;aInterval: Integer);
var
QW : Int64;
begin
inherited Create(True);
hParent := aParentHandle;
FInterval := aInterval;
FreeOnTerminate := True;
Exists := QueryPerformanceFrequency(QW);
ClockRate := QW;
STime := getTickCount;
// Priority := tpTimeCritical;
StartTimer;
Resume;
end;

function TFTimer.StartTimer : Boolean;
var
QW : Int64;
begin
Result := QueryPerformanceCounter(QW);
StartTime := QW;
end;

function TFTimer.ReadTimer : Double;
var
ET : Int64;
begin
QueryPerformanceCounter(ET);
Result := 10.0*(ET - StartTime)/ClockRate;
end;

procedure TFTimer.Execute;
var
n: Int64;
begin
n := 0;
while not Terminated do
begin
n := GetTickCount - STime;
Application.ProcessMessages;
if n >= FInterval then
begin
Stime := GetTickCount;
PostMessage(hParent,WM_FTIMER,0,n);
end;

// windows.Sleep(FInterval);
// inc(n);
// PostMessage(hParent,WM_FTIMER,0,0);
end;

end;

end.


 
Deb   (2003-12-12 02:16) [6]

function GetTime:int64;
asm
{$IFDEF VER140} //Для Delphi 6.x
rdtsc
{$ELSE} //Для Delphi 5.x
db 0Fh, 31h
{$ENDIF}
end;

и юзаем:
procTime:=GetTime;
// процедура
procTime:=GetTime - procTime;

Результат возвращается в тактах, погрешность до одного такта



Страницы: 1 вся ветка

Текущий архив: 2003.12.23;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.007 c
7-75437
SlavaZ
2003-10-21 09:22
2003.12.23
Запись CD


1-75179
Mishenka
2003-12-04 22:38
2003.12.23
Печать файла.


7-75412
miek
2003-10-17 19:13
2003.12.23
секрет DOS


14-75372
MMMaloy
2003-11-28 22:32
2003.12.23
набор картинок к кнопкам


6-75294
som
2003-10-24 14:27
2003.12.23
как скачать по FTP папку со всеми вложенными папками?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский