Как определить текущее разрешение таймера Windows? [дубликат]
На этот вопрос уже есть ответ здесь:
Это может быть очевидно, но я не могу найти/google правильный метод, чтобы получить текущее системное значение разрешения таймера, которое программа может установить timeBeginPeriod(n)/timeEndPeriod(n). Я хочу выяснить, в чем дело. текущее разрешение... Значение Windows 7 по умолчанию, по-видимому, составляет 15,6 МС, но другие приложения или поставщик машины могли изменить этот параметр.
Есть некоторые инструменты, которые сообщают значение, но мне нужно прочитать значение в приложении.
Спасибо за любую быструю подсказку или ссылку. C# был бы плюсом, но я знаю свой путь с P/Invoke.
Редактировать: Благодаря ответу я сделал небольшой инструмент в C#, который использует описанное метод: github.com/tebjan/TimerTool
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)
отражаются в действительном разрешении .Подробнее в этом ответе.