當我使用WaitForSingleObject函數等待非信號事件時,我發現在某些情況下,調用將返回小於指定的超時期限的WAIT_TIMEOUT。簡單地循環呼叫的超時設置爲1000ms,我已經看到呼叫在低至990ms的時間內(在WinXP上運行)返回。我使用QueryPerformanceCounter來獲得系統時鐘無關的時間測量,所以我不認爲時鐘漂移可能是一個答案。WaitForSingleObject的超時分辨率
此行爲對我來說不存在任何實際問題,但我想更好地理解它。看起來它可能在大約計時器分辨率的分辨率下工作。微軟是否發佈關於此功能精度的更多細節?我應該期待Vista的更高精度嗎?
我想推薦一個小測試:在等待函數前面加一個`sleep(0)`。這很可能會改變行爲以滿足您的期望。另外:通過使用由QueryPerformanceFrequency()返回的頻率將QueryPerformanceCounter()的結果轉換爲時間值意味着頻率是精確的。給定的頻率被視爲一個常數。但unterlaying硬件有容差。頻率始終有一個偏移量,甚至可能存在熱漂移。 – Arno 2012-08-02 13:06:22