「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ## WinAPI の Sleep(1) が予想よりも長いスランバーを引き起こすのはなぜですか?

## WinAPI の Sleep(1) が予想よりも長いスランバーを引き起こすのはなぜですか?

2024 年 10 月 31 日公開
ブラウズ:670

## Why Does Sleep(1) in WinAPI Cause a Lengthier Slumber Than Expected?

WinAPI スリープ関数の難問: 予想よりも長いスランバー

パラメータ 1 を指定して WinAPI スリープ関数を呼び出すと、ユーザーはスレッド遅延に遭遇する可能性があります予定された期間を超えた場合。実際、一連の 100 回の Sleep(1) 呼び出しの繰り返しにより、合計スリープ時間は 1500 ミリ秒となり、規定の 100 ミリ秒をはるかに上回りました。

スリープ延長の原因:

この動作は Windows スレッド スケジューラに固有のものです。これは、タイム クォンタム、つまりスレッドが実行できる定義された期間で動作します。ゼロ以外の遅延は本質的に最も近い完全な量子に切り上げられます。

考えられるシステムの問題:

観察された動作は典型的なものですが、除外すると有利な場合があります。問題を悪化させる可能性のある潜在的なシステム問題:

  • マザーボード (MOBO): MOBO ハードウェアの障害はクロックの精度に影響を及ぼし、スリープ期間が長くなる可能性があります。
  • CPU: MOBO の問題と同様に、CPU の不規則性もタイミングの不一致を引き起こす可能性があります。
  • Windows のインストール: システム エラーまたは不完全なインストールにより、Windows のタイムキーピング機能が中断される可能性があります。

追加の考慮事項:

他の実行中のプログラムがシステム全体のタイマー解像度を調整できるため、クォンタム サイズが小さくなる可能性があることは注目に値します。これは、Sleep(1) 遅延が意図した 1ms 時間枠内にあると報告される例を説明できます。 Windows 7 のデフォルトのタイマー解像度は、1 ミリ秒ではなく、約 15.6 ミリ秒である必要があります。

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

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

Copyright© 2022 湘ICP备2022001581号-3