![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реальный счёт сотых долей секунды
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.