「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > WinAPI Sleep(1) で 15 ミリ秒の一時停止が発生するのはなぜですか?

WinAPI Sleep(1) で 15 ミリ秒の一時停止が発生するのはなぜですか?

2024 年 11 月 8 日に公開
ブラウズ:818

Why Does WinAPI Sleep(1) Result in a 15 Millisecond Pause?

WinAPI Sleep() 関数の継続時間の不一致を理解する

1 ミリ秒のパラメーターを指定して WinAPI Sleep() 関数を呼び出すと、実際にはスレッドがかなり長い時間 (通常は約 15 ミリ秒) 一時停止していることが観察されます。この現象は、潜在的なシステムの問題に関する懸念を引き起こします。

Windows の時間量子化

Windows は、スレッド スケジューリングに時間量子化メカニズムを採用しています。これは、システムがクォンタムと呼ばれる離散的な間隔でスレッドをスケジュールすることを意味します。これらの間隔の正確な期間は、Windows のバージョンやエディションなどのいくつかの要因によって異なります。平均して、Windows 7 は約 15.6 ミリ秒の時間量子で動作します。

Sleep() 持続時間への影響

時間量子化の結果、ゼロ以外の時間量子はすべてSleep() に指定された遅延引数は、最も近い量子に切り上げられます。これは、Sleep(1) 呼び出しが実際に 15 ミリ秒間スレッドを一時停止する理由を説明しています。これは、1 ミリ秒に最も近いタイム クォンタムです。

検証

この動作を検証するには、提供されたコード スニペットを実行できます。コードを実行すると、システムのタイマー解像度設定に応じて異なる結果が得られる場合があります。システム全体のタイマー解像度が手動で 1 ミリ秒に設定されている場合、スリープ時間が短くなる可能性があります。ただし、デフォルトでは、Windows 7 は 15.6 ミリ秒のタイマー解像度を使用するため、スリープ時間が長くなります。

結論

Sleep() 関数の不一致期間は、Windows のスレッド スケジューラに固有の時間量子化メカニズムに起因します。この切り上げにより、スレッド スケジューリングが効率的かつ予測どおりに実行され、潜在的なスレッド スケジューリングの競合が防止されます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3