当我使用WaitForSingleObject函数等待非信号事件时,我发现在某些情况下,调用将返回小于指定的超时期限的WAIT_TIMEOUT。简单地循环呼叫的超时设置为1000ms,我已经看到呼叫在低至990ms的时间内(在WinXP上运行)返回。我使用QueryPerformanceCounter来获得系统时钟无关的时间测量,所以我不认为时钟漂移可能是一个答案。WaitForSingleObject的超时分辨率
此行为对我来说不存在任何实际问题,但我想更好地理解它。看起来它可能在大约计时器分辨率的分辨率下工作。微软是否发布关于此功能精度的更多细节?我应该期待Vista的更高精度吗?
我想推荐一个小测试:在等待函数前面加一个`sleep(0)`。这很可能会改变行为以满足您的期望。另外:通过使用由QueryPerformanceFrequency()返回的频率将QueryPerformanceCounter()的结果转换为时间值意味着频率是精确的。给定的频率被视为一个常数。但unterlaying硬件有容差。频率始终有一个偏移量,甚至可能存在热漂移。 – Arno 2012-08-02 13:06:22