Главная страница
    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.007 c
1-75162
Villain
2003-12-09 19:19
2003.12.23
Редактор компонентов.


1-75234
Clift
2003-12-10 19:32
2003.12.23
Paramstr()


14-75381
Vint
2003-11-28 13:09
2003.12.23
День матери


1-75267
Yu
2003-12-10 10:35
2003.12.23
Переполнение буфера?


14-75342
AkaSaint
2003-11-27 23:16
2003.12.23
Предложение работы





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