Этот вопрос не о точной синхронизации времени в Windows (XP или лучше), а скорее о том, чтобы что-то сделать очень быстро с помощью обратного вызова или прерывания .
Мне нужно делать что-то регулярно каждую 1 миллисекунду, или, желательно, даже каждые 100 микросекунд. Что мне нужно сделать, так это подключить некоторое асинхронное оборудование (Ethernet) с такой скоростью, чтобы выводить постоянный поток пакетов в сеть и делать этот поток как можно более регулярным и синхронным. Но если вопрос можно отделить от устройства (ethernet), было бы хорошо узнать общий ответ.
Прежде чем сказать "даже не думай об использовании Windows !!!!", немного контекста. Не все системы реального времени предъявляют одинаковые требования. В большинстве случаев песни и видео воспроизводятся в Windows приемлемо, несмотря на необходимость обработки блоков аудио или изображений каждые 10-16 мс в среднем. С соответствующей буферизацией у Windows могут быть свои переменные задержки, но аппаратное обеспечение может быть широко защищено от них и поддерживать постоянный синхронный поток событий. Несмотря на это, большинство из нас терпят случайный сбой. Мое заявление такое - возможно, довольно терпимое.
Дорогой вариант для меня - перенести все приложение на Linux. Но Linux - это просто другое программное обеспечение, работающее на одном и том же оборудовании, поэтому я предпочитаю написать более качественное программное обеспечение и придерживаться Windows. У меня есть возможность избавиться от всех конкурирующих аппаратных и программных средств (без доступа к Интернету или другим сетям, других запущенных приложений и т. Д.). Есть ли у меня перспективы получить Windows для этого? С какими ограничениями я столкнусь?
Я знаю, что мое целевое оборудование имеет высокопроизводительный таймер событий и этот таймер можно запрограммировать на прерывание, но для него нет драйвера. Могу ли я написать один? Есть ли полезные примеры? Я еще не нашел один. Будет ли это мешать QueryPerformanceCounter? Означает ли тот факт, что я собираюсь использовать устройство Ethernet, все становится просто, если я использую select () разумно?
Приветствуются ссылки на полезные статьи - я нашел десятки обзоров о том, как получить точное время, но еще ни одного о том, как сделать что-то подобное, кроме использования того, что равносильно напряженному ожиданию. Есть ли способ избежать занятого ожидания? Есть ли режим ядра или опция драйвера устройства?