WaitForSingleObject関数を使用して信号なしのイベントを待つと、指定されたタイムアウト時間より短い時間でWAIT_TIMEOUTが返される場合があります。タイムアウトを1000msに設定してコールをループするだけで、990msという低い期間(WinXPで動作)でコールが返ってきたことがわかりました。私はQueryPerformanceCounterを使用して、システムクロックに依存しない時間測定値を取得しているので、クロックドリフトは答えになるとは思わない。WaitForSingleObjectのタイムアウトの解決
この動作は私にとっては実用的な問題ではありませんが、より良く理解したいと思います。おおよそタイマーティックの解像度で動作しているようです。マイクロソフトはこの機能の精度に関する詳細を公開していますか?私はVistaでより高い精度を期待する必要がありますか?
私は小さなテストを提案したいと思います:wait関数の前に 'sleep(0)'を入れてください。これはあなたの期待に応えるために行動を変える可能性が非常に高いです。また、 'QueryPerformanceCounter()'の結果を 'QueryPerformanceFrequency()'によって返される頻度を使って時間値に変換することは、その頻度が正確であることを意味します。与えられた周波数は定数として扱われます。しかし、ハードウェアには許容誤差があります。周波数には常にオフセットがあり、場合によっては熱ドリフトもあります。 – Arno