Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чем можно заменить GetTickCount? Нужна точность до 1 мсек! [D7, WinXP]


Страницы:   1 2

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;


Спасибо всем за любые идеи!


wait   (2007-09-19 11:13:00) [1]

http://support.microsoft.com/kb/172338


Jeer   (2007-09-10 15:56:00) [2]

В дополнение к [8] для измерения времени собственно затрачиваемых на код, а не + его системную обслугу следует пользоваться GetProcessTimes, что позволяет иметь дискретность 100 ns


Jeer   (2007-09-10 15:50:00) [3]

NtSetTimerResolution and NtQueryTimerResolution are defined as follows. All times are specifified in hundreds of nanoseconds.

NTSTATUS NtSetTimerResolution (
 IN ULONGRequestedResolution,
 IN BOOLEANSet,
 OUT PULONGActualResolution
);

Parameters

RequestedResolution

The desired timer resolution. Must be within the legal range of system timer values supported by NT. On standard x86 systems this is 1-10 milliseconds. Values that are within the acceptable range are rounded to the next highest millisecond boundary by the standard x86 HAL. This parameter is ignored if the Set parameter is FALSE.

MinimumResolution

The minimum timer resolution. On standard x86 systems this is 0x2625A, which is about 10 milliseconds

MaximumResolution

The maximum timer resolution. On standard x86 systems this is 0x2710, which is about 1 millisecond.


Jeer   (2007-09-10 15:48:00) [4]

Sets the resolution of the system timer on the standard x86 multiprocessor HAL (Halmps.dll). The argument is a number interpreted in hundreds of nanoseconds, but the rate is set to the closest resolution the HAL supports that isn't larger than the one requested. The HAL supports the following resolutions: Hundreds of nanoseconds Milliseconds (ms) 9766 0.98 19532 2.00 39063 3.90 78125 7.80 The default resolution is 7.8 ms.


Jeer   (2007-09-10 15:46:00) [5]


> homm ©   (10.09.07 15:40) [29]
>
> > [27] Jeer ©   (10.09.07 15:39)
> > возможности типа
>
> Это кстати, вообще о чем?


Это к тому, что тип целое позволяет дискретизировать до 1 ms, что никак в лучшую сторону, впрочем, не связано со slice системы:))


Jeer   (2007-09-10 15:44:00) [6]


> homm ©   (10.09.07 15:39) [28]
>
> > [27] Jeer ©   (10.09.07 15:39)


Оговорился - 10 ms для nT
Системный таймер можно поднастроить из boot.ini


clickmaker   (2007-09-10 15:44:00) [7]

GetSystemTimeAdjustment ?


homm   (2007-09-10 15:40:00) [8]

> [27] Jeer ©   (10.09.07 15:39)
> возможности типа

Это кстати, вообще о чем?


homm   (2007-09-10 15:39:00) [9]

> [27] Jeer ©   (10.09.07 15:39)

Чего? ты же сказал, что она заявлена в 1 мс.


Jeer   (2007-09-10 15:39:00) [10]

homm ©   (10.09.07 15:30) [25]
clickmaker ©   (10.09.07 15:35) [26]

Зависит от системы + возможности типа.


clickmaker   (2007-09-10 15:35:00) [11]


> Дискретность GetTickCount заявлена в 1 ms

кем?


homm   (2007-09-10 15:30:00) [12]

> Дискретность GetTickCount заявлена в 1 ms и точка

В справке виндовс очень много всего, что заявлено. Тем не менее это не так. Дискретность GetTickCount для винНТ 10 мсек, для 9х было, кажеться, 50 или около того. (могу вечером проверить);


Jeer   (2007-09-10 15:24:00) [13]


> homm ©   (09.09.07 13:34) [16]


Полагаю не стоит путать точность и дискретность.
Дискретность GetTickCount заявлена в 1 ms и точка, поскольку возвращаемый тип "целое" не дает надежды на большее.
Для неудачности исполнения GetTickCount следует постараться особым образом, поэтому на меньшее тоже особо не стоит рассчитывать.
Точность же дискретности - тема hardware, но полагаю, что варианты измерения интервала в 100 мс (тиков) и 100.1 мс (реал) отличаются незначительно, с точки зрения практических результатов.

Если же говорить о методическом подходе, то Инс все разложил по полочкам в [8].
Инструмент же измерения может может любым, адекватным текущей задаче измерения (RDTSC, QueryPerf, GetTickCount)


Anatoly Podgoretsky   (2007-09-09 14:17:00) [14]

> Германн  (09.09.2007 14:14:22)  [22]

Ну не каждый же день такое удается :-)


Германн   (2007-09-09 14:14:00) [15]


> Anatoly Podgoretsky ©   (09.09.07 14:11) [21]

Наверняка с большим удовольствием :-)


Anatoly Podgoretsky   (2007-09-09 14:11:00) [16]

> oxffff  (09.09.2007 13:53:20)  [20]

Ну я и отмодерировал


oxffff   (2007-09-09 13:53:00) [17]


> Anatoly Podgoretsky ©   (09.09.07 13:50) [19]
> > oxffff  (09.09.2007 13:46:18)  [18]
>
> А почему нет, разве есть неприкасаемые?


А вы разве не модератор?
:)


Anatoly Podgoretsky   (2007-09-09 13:50:00) [18]

> oxffff  (09.09.2007 13:46:18)  [18]

А почему нет, разве есть неприкасаемые?


oxffff   (2007-09-09 13:46:00) [19]


> Anatoly Podgoretsky ©   (09.09.07 12:27) [12]
> Удалено модератором


Такое разве возможно?


Anatoly Podgoretsky   (2007-09-09 13:37:00) [20]

> homm  (09.09.2007 13:34:16)  [16]

Теперь попробуй это прочитать с помощью словарика.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо