Как определить текущее разрешение таймера Windows? [дубликат]


На этот вопрос уже есть ответ здесь:

Это может быть очевидно, но я не могу найти/google правильный метод, чтобы получить текущее системное значение разрешения таймера, которое программа может установить timeBeginPeriod(n)/timeEndPeriod(n). Я хочу выяснить, в чем дело. текущее разрешение... Значение Windows 7 по умолчанию, по-видимому, составляет 15,6 МС, но другие приложения или поставщик машины могли изменить этот параметр.

Есть некоторые инструменты, которые сообщают значение, но мне нужно прочитать значение в приложении.

Спасибо за любую быструю подсказку или ссылку. C# был бы плюсом, но я знаю свой путь с P/Invoke.

Редактировать: Благодаря ответу я сделал небольшой инструмент в C#, который использует описанное метод: github.com/tebjan/TimerTool

Введите описание изображения здесь

1 2

1 ответ:

Разрешение таймера Windows обеспечивается скрытым вызовом API:

NTSTATUS NtQueryTimerResolution(OUT PULONGMinimumResolution, 
                                OUT LONGMaximumResolution, 
                                OUT PULONGActualResolution);

NtQueryTimerResolution экспортируется собственной библиотекой Windows NT NTDLL.файл DLL.

Распространенных аппаратных платформ доклад 156,250 или 100,144 для ActualResolution; старых платформ может сообщить даже большие числа; новых систем, в частности, когда HPET (таймер высокоточных событий) или постоянный/инвариантные ЦТП поддерживаются, может вернуть 156,001 для ActualResolution.

Вызовы timeBeginPeriod(n) отражаются в действительном разрешении .

Подробнее в этом ответе.