[an error occurred while processing this directive]
|
Мне нужно было формировать импульс с интервалом порядка 100-1000мс, причем длительность импульса 0.1 - 50 мс с шагом 0.1с.
1.Сделал подзадачу (использовал клас TThread).
2.Поставил ей приоритет time_critical
3.На время паузы переводил ее в sleep(time_ms) на время меньше заданног на несколько ms, при этом она другим задачам не мешает.
4.Чтобы точно установить длительность импульса использовал функцию
QueryPerformanceCounter и QueryPerformanceFrequance (в 98-х она читает регистры таймера на плате, разрешение 1.2мкс, в новых - специальный счетчик внутри процессора.
Проверили в 98-х и 2000-ных на осциллографе - дрожание меньше 0.05мс.
Правда, если в это время обратиться к дискете - будут провалы, но чтобы не было пропусков сделать легко - если прошло больше времени вызвать несколько событий подряд.
Исходников сейчас под рукой нет, но написал все где-то за час.
E-mail: info@telesys.ru