Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.011 c
1-75226
jonni
2003-12-10 01:17
2003.12.23
минимизирование и активирование TForm


4-75443
Nick_Omsk
2003-10-29 19:50
2003.12.23
Как сделать независимую форму и невидимую в TaskBar


14-75359
Gorlum
2003-11-29 13:38
2003.12.23
Тормозят фильмы


7-75436
Genek84
2003-10-14 13:48
2003.12.23
Программа съедает память!


9-75068
Кен
2003-06-03 03:45
2003.12.23
К GLScene прикрутили bsp и md3. Как теперь между ними проверять и





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский