WinAPI Sleep() 関数呼び出しの予期しない継続時間
WinAPI Sleep() 関数は、スレッドの実行を一時停止するために使用されます。指定された期間。ただし、場合によっては、スリープ期間が意図した値を超えることが確認されています。
Windows 7 では、Sleep(1) を呼び出すと、予想される 1 ミリ秒ではなく、約 15 ミリ秒の遅延が発生する場合があります。これは、100 回の Sleep(1) 呼び出しのループを実行し、合計 1500 ミリ秒のスリープ時間を観察することで検証されています。
期待される動作
次の点に注意することが重要です。この継続時間の延長は、Windows オペレーティング システムの一般的な動作です。スレッド スケジューラは、事前定義された時間間隔であるタイム クォンタムに基づいて動作します。ゼロ以外の遅延リクエストは、最も近い完全な量子に調整されます。
したがって、スリープ期間は最も近い時間量子 (この場合は 15 ミリ秒) に引き上げられます。
依存関係外部要因
スリープ期間の長さは、システム全体のタイマー解像度によっても影響を受ける可能性があります。デフォルトでは、Windows 7 はこの解像度を 15.6 ミリ秒に設定します。ただし、他のプログラムまたはシステム構成によってこの設定が変更される可能性があり、その結果、タイマー解像度が低くなります (例: 1ms)。
そのようなシナリオでは、Sleep(1) 呼び出しのスリープ時間が短くなる可能性があります。
以上がWinAPI Sleep() 関数呼び出しが予想時間を超える場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。