![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чем можно заменить GetTickCount? Нужна точность до 1 мсек! [D7, WinXP]
Dr. Andrew © (2007-09-09 01:53:00)Доброй ночи, Мастера! GetTickCount дает точночть до 100 мсек, а мне нужно отсчитать время работы процедуры с точностью до 1 мсек. Подскажите как это можно реализовать.
Сейчас схематично процедура выглядит так, но меня не устраивает точность:
procedure TForm1.XXX();
var Ticks : Cardinal;
begin
Ticks := GetTickCount;
// блок выполнения кодов в процедуре
Label1.Caption := IntToStr(GetTickCount - Ticks);
end;
Спасибо всем за любые идеи!
homm (2007-09-09 13:34:00) [21]> [15] Anatoly Podgoretsky © (09.09.07 13:24)
The GetTickCount function retrieves the number of milliseconds that have elapsed since Windows was started.
DWORD GetTickCount(VOID)
Parameters
This function has no parameters.
Return Values
If the function succeeds, the return value is the number of milliseconds that have elapsed since Windows was started.
Нигде не сказано, что разрешение 1 мс, тем более что это и в действительности не так.
Anatoly Podgoretsky (2007-09-09 13:24:00) [22]> homm (09.09.2007 12:29:14) [14]
Ты кажется меня в справку посылал, не хочешь ее сам посмотреть?
homm (2007-09-09 12:29:00) [23]> А насчет точности GetTickCount можно не волноваться, у него
> как раз точность 1 МС
Нет.
homm (2007-09-09 12:28:00) [24]> [9] Anatoly Podgoretsky © (09.09.07 12:22)
> Это что то меняет?
Нет, оно что-то возвращает. Смотреть описание функций и справку.
Anatoly Podgoretsky (2007-09-09 12:27:00) [25]Удалено модератором
Anatoly Podgoretsky (2007-09-09 12:27:00) [26]Что бы более или менее надежно отмерять такие короткие интервалы, нужна другая ОС РВ, с такто на порядок короче отмеряемого интервала, то есть не 10 мс, а 100 нс, не знаю, более специализированые ОС могут ли работать с таким системным тактом.
А насчет точности GetTickCount можно не волноваться, у него как раз точность 1 МС
Anatoly Podgoretsky (2007-09-09 12:22:00) [27]> Инс (09.09.2007 11:45:08) [8]
> Маленькие куски кода можно более или менее точно измерять с помощью команды RDTSC
Это что то меняет?
Anatoly Podgoretsky (2007-09-09 12:22:00) [28]> homm (09.09.2007 07:55:05) [5]
Это что то меняет?
Инс (2007-09-09 11:45:00) [29]Если вы таким образом хотите замерить скорость работы вашего алгоритма, то в общем случае, погрешность результата может быть очень большой из-за переключения контекстов планировщиком. Маленькие куски кода можно более или менее точно измерять с помощью команды RDTSC. А большие куски можно более или менее точно сравнить, скажем, запустив их в цикле 10000 раз.
Sha (2007-09-09 09:08:00) [30]> Dr. Andrew
Даже при помощи GetTickCount можно получить большую точтость,
если использовать цикл.
Rial (2007-09-09 08:13:00) [31]function rtNearestTime : Double;
Var
F : TLargeInteger;
C : TLargeInteger;
begin
QueryPerformanceFrequency(F);
QueryPerformanceCounter(C);
Result := 1000.0 * C / F;
end;
homm (2007-09-09 07:55:00) [32]QueryPerformanceCounter, QueryPerformanceFrequency
Dr. Andrew (2007-09-09 02:32:00) [33]Спасибо за ответ, но сам код процедуры не имеет принципиального значения. Вы правы необходимо измерить отрезок времени выполнения кода и все с точностью до 1мсек. А код может быть какой угодно. Это не принципиально. Спасибо!
Германн (2007-09-09 02:29:00) [34]
> Dr. Andrew (09.09.07 02:11) [2]
>
> Проверьте сами.
Проверял и не один раз.
> Вообщем вопрос не в дискуссии о точности GetTickCount, а
> как можно отмерить отрезок времени с точностью до 1 мсек.
>
А вот это уже другой вопрос, но не правильно заданный, имхо. Измеритьможно, отмеритьнельзя. Винда не даст.
Более конкретный ответ получишь, если дашь пример без ХХХ и без // :-)
Dr. Andrew (2007-09-09 02:11:00) [35]Проверьте сами. Вообщем вопрос не в дискуссии о точности GetTickCount, а как можно отмерить отрезок времени с точностью до 1 мсек. Спасибо!
Германн (2007-09-09 02:03:00) [36]
> Dr. Andrew (09.09.07 01:53)
>
> Доброй ночи, Мастера! GetTickCount дает точночть до 100
> мсек
Кто тебе сказал такую глупость?