我知道每个tick的默认值是15.6 ms,但是一些输家可能会改变它然后一次又一次地来回更改,我需要轮询当前值来执行有效的QueryPerformanceCounter同步.
那么有一种获取定时器分辨率的API方法吗?
我正在使用C++ BTW.
Arn*_*rno 12
Windows计时器解析由隐藏的API调用提供:
NTSTATUS NtQueryTimerResolution(OUT PULONG MinimumResolution, 
                                OUT PULONG MaximumResolution, 
                                OUT PULONG ActualResolution);
NtQueryTimerResolution由本机Windows NT库NTDLL.DLL导出.
常见的硬件平台为ActualResolution报告156,250或100,144 ; 较旧的平台可能会报告更多的数字; 更新的系统,特别是当支持HPET(高精度事件计时器)或恒定/不变TSC时,可以为ActualResolution返回156,001.
呼叫timeBeginPeriod(n)反映在ActualResolution中.
这个答案的更多细节.
这不会有帮助,另一个过程可以在您校准时更改它。
这属于“如果你不能打败他们,就加入他们”的类别。timeBeginPeriod(1)在开始校准之前致电。这可确保您拥有一个任何人都无法更改的已知费率。获得改进的计时器精度肯定也不会受到伤害。
请注意,您不太可能比 QueryPerformanceFrequency() 做得更好。除非您校准很长时间,否则时钟速率不足以为您提供额外的精度,因为您的测量永远不会超过 +/- 0.5 毫秒。并且定时器事件不是以毫秒精度传递的,它可以任意延迟。如果您长时间校准,那么 GetTickCount64() 就足够了。
| 归档时间: | 
 | 
| 查看次数: | 5298 次 | 
| 最近记录: |