[an error occurred while processing this directive] [an error occurred while processing this directive]
Есть еще один сравнительно честный способ для формирования задержек (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Беня 11 апреля 2002 г. 11:08
В ответ на: В продолжение темы прошлой страницы - временные задержки на C++ Builder вопрос (+) отправлено Make_Pic 11 апреля 2002 г. 08:54

В API Windows есть функции :
QueryPerformanceFrequency
QueryPerformanceCounter

The QueryPerformanceFrequency function retrieves the frequency of the high-resolution performance counter.
The QueryPerformanceCounter function retrieves the current value of the high-resolution performance counter.
У меня на машине функция QueryPerformanceFrequency возвращает число 1193180 - т. е. частота этого счетчика 1193180, а период получается менее одной микросекунды, так что Вам должно хватить. Я эту функцию вызываю один раз при старте программы, чтобы узнать период счетчика, а далее все задержки пересчитываю в тики этого high-resolution performance counter и для задержек использую цикл, в котором считываю текущее значение этого счетчика, пока оно не станет большим или равным требуемого значения.
Еще рекомендуется своему приложению в такие критические моменты устанавливать самый высокий пориоритет - типа real time, а то Windows в общем-то в принципе может сама не в тему "вклиниться" и что-то свое в это время делать - своппинги там разные.
Так что можно и без драйверов обойтись :-)))

P.S.

А еще в API есть функция : DWORD GetTickCount(VOID)
The GetTickCount function retrieves the number of milliseconds that have elapsed since Windows was started.
Но она менее "чувствительная".


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru