Печальная правда в том, что нет хорошего ответа на это. Таймеры мультимедиа, вероятно, самые близкие, которые вы можете получить - они позволяют устанавливать периоды только до 1 мс, , но (благодаря timeBeginPeriod
), они действительно обеспечивают точность около 1 мс, где большинство других делайте, как правило, только 10-15 мс.
Есть много других кандидатов. На первый взгляд, CreateWaitableTimer
и SetWaitableTimer
, вероятно, кажутся самым близким эквивалентом, поскольку они установлены в 100 нс. К сожалению, вы не можете зависеть от такого разрешения, по крайней мере, в моем тестировании. В долгосрочной перспективе они, вероятно, предоставляют наилучшую возможность, поскольку, по крайней мере, позволяют вам указать время менее 1 мс, хотя в настоящее время вы не можете зависеть от реализации, обеспечивающей (где-либо близко) это разрешение.
NtDelayExecution
кажется примерно таким же, как SetWaitableTimer
, за исключением того, что он не имеет документов. Если вы не настроены на использование / тестирование недокументированных функций, мне кажется, что CreateWaitableTimer
/ SetWaitableTimer
- лучший выбор только на основании документации.
Если вы используете пулы потоков, вы можете попробовать использовать CreateThreadPoolTimer
и SetThreadPoolTimer
. Я недостаточно тестировал их, чтобы иметь уверенность в том, какое разрешение они действительно предоставляют, но я не особенно оптимистичен.
Очереди таймеров (CreateTimerQueue
, CreateTimerQueueTimer
и т. Д.) - это то, что MS рекомендует в качестве замены мультимедийных таймеров, но (по крайней мере, в моем тестировании) они на самом деле не обеспечивают намного лучшее разрешение, чем Sleep
.