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

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

Реальный счёт сотых долей секунды


Vl_Kr ©   (2003-08-05 18:46:00) 

Уважаемые господа.
Помогите решить задачу учёта времени между событиями с точностью до сотых долей секунды. Реально-ли решить эту проблему для параллельных процессов. События фиксируются приходом информации на последовательный порт.


miek   (2003-08-16 21:05:00) [1]

QueryPerformanceTimer дают не 50КГц, а 1МГц - это же определяется микросхемой таймера, а у нее именно такое разрешение.

Насчет RDTSC все верно. Сам пользуюсь постоянно. Только есть две тонкости - 1) подгружать все данные и код в кэш перед началом измерений 2) перел измерением повышать приоритет своего процесса до Highest


Viktorious   (2003-08-16 16:48:00) [2]

->VuDZ:но чем не подходит GetTickCount()? Или использовать мультимедиа таймеры...

GetTickCount (и стандартные виндовые таймеры) дают точность до 1/12 секунды (по-моему), на частоте 12Гц работает основной таймер компьютера.
Мультимедиа-таймеры дают точность до тысячной доли секунды.
Функции QueryPerfomanceCounter дают разрешение около 50 кГц - это зависит от компьютера, на Celeron 1000MHz разрещение около 3МГц.

Наиболее точный метод - ассемблерная команда RDTSC. Это счетчик, который увеличивается на 1 при каждом такте процессора, его значение и считывается этой командой. То есть если у тебя гигагерцовый проц, интервалы времени можно измерять с точностью до 1 наносекунды! Если Pentium 100 - то с точностью до десятков наносекунд.


VuDZ   (2003-08-10 19:52:00) [3]

я извеняюсь, пиво и всё такое, но чем не подходит GetTickCount()? Или использовать мулимедиа таймеры...


Vl_Kr   (2003-08-06 12:15:00) [4]

Спасибо, буду учиться.


miek   (2003-08-05 20:09:00) [5]

Есть прекрасные функции QueryPerformanceCounter, QueryPerformanceFrequency. Дают разрешение до 1МГц. Если и этого не хватает, используйте ассемблерную инструкцию RDTSC.


Anatoly Podgoretsky   (2003-08-05 19:13:00) [6]

Сотые и миллиардные доли получить не сложно, а вот насчет точности здесь есть непреодолимое препятствие в лице ОС


Лёша   (2003-08-05 19:10:00) [7]

попробуй:
function MilliSecondsBetween(const ANow, AThen: TDateTime): Int64;
Returns the number of milliseconds between two specified TDateTime values.


Наверх

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