windows c ++ и возможность микросекундного сна - PullRequest
3 голосов
/ 21 июля 2011

Есть ли вообще что-то в среде Windows, чтобы спать в течение ~ 1 микросекунды?Изучив и прочитав множество тем и различных веб-сайтов, я не смог понять, что это возможно.Поскольку планировщик, по-видимому, является ограничивающим фактором и работает на уровне 1 миллисекунды, я считаю, что это невозможно сделать без перехода на ОС реального времени.

Ответы [ 2 ]

1 голос
/ 12 июля 2012

Несмотря на то, что Windows считается не "ОС реального времени", события могут генерироваться с микросекундным разрешением.Использование комбинации системного времени (file_time) и частоты счетчика производительности было описано в других местах .Тем не менее, тщательная реализация с заботой о сродстве процессоров и приоритетах процессов / потоков открывает двери для синхронизированных событий с микросекундным разрешением.

Поскольку планировщик Windows и службы таймера Windows полагаются на механизм системных прерываний, микросекунда может быть настроена только путем опроса.Особенность опроса многоядерных систем теперь уже не так безобразна.И опрос должен длиться только в течение максимально короткого периода прерывания.Интерфейс мультимедийного таймера позволяет установить период прерывания примерно до 1 мс, таким образом, можно приблизиться к желаемому времени (микросекундное разрешение), и опрос будет длиться максимум 1 мс.

Моя реализация служб времени с микросекундным разрешениемдля Windows тестовый код и подробное описание можно найти в проекте отметки времени Windows, расположенном по адресу windowstimestamp.com

1 голос
/ 21 июля 2011

Возможно, он не самый переносимый, и я сам не использовал эти функции, но можно использовать информацию в разделе Таймер высокого разрешения этой ссылки и блока: QueryPerformanceCounter

...