2014-01-21 58 views
2

這可能很明顯,但我找不到/ google獲取定時器分辨率的當前系統值的正確方法,程序可以通過timeBeginPeriod(n)/ timeEndPeriod(n)設置該值。我想知道當前的分辨率是多少... Windows默認值似乎是15.6  毫秒,但其他應用程序或機器供應商可能已更改設置。如何確定當前的Windows定時器分辨率?

有一些報告值的工具,但我需要讀取應用程序中的值。

感謝您提供任何快速提示或鏈接。 C#將是一個加號,但我知道我的方式與P/Invoke

編輯: 多虧了答案,我已經取得了在C#中的小工具,它使用所描述的方法: github.com/tebjan/TimerTool

Enter image description here

+0

是的,我已經看到這個線程,但沒有回答實際問題... – thalm

+0

這可能是事實,但將問題標記爲重複的想法是嘗試保留所有答案(好的和壞的)一起在一個地方。你也許可以選擇對原始問題提供賞金,而不是再次提出同樣的問題。 –

+0

聽起來不錯,我不熟悉這個概念。即使不是我的問題,我可以提供賞金嗎? – thalm

回答

2

的Windows計時器的分辨率是由隱藏API提供:

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

NtQueryTimerResolution由本地Windows NT庫NTDLL.DLL導出。

通用硬件平臺報告156,250或100,144 實際分辨率;舊平臺可能會報告更多的數據;較新的系統,特別是當支持HPET(高精度事件定時器)或恆定/不變TSC時,實際分辨率可能會返回156,001。

致電timeBeginPeriod(n)反映在實際分辨率

更多詳細情況在this解答。

相關問題