3

Sleep(10000) のようなものを実行し、その間にシステム クロックが変更された場合、スレッドは壁時計時間の 10 秒間、またはそれ以下またはそれ以上スリープしますか? つまり、Sleep() 関数はミリ秒をハードウェア ティックに変換しますか?

4

2 に答える 2

9

Sleep() は壁時計時間とは無関係です。これは、スレッドのスケジューリングに使用されるのと同じタイマーに基づいています。

ただし、システムクロックの周波数と、タイムアウトが経過した後に実際に実行するようにスケジュールされているため、ほとんどの場合、正確に 10 秒間スリープすることはありません。

于 2010-06-15T15:41:47.477 に答える
3

私が知っているところには文書化されていませんが、そうです、あなたは安全にそう仮定することができます。そうしなかった場合、それは非常に破壊的であり、日光の遷移は年に2回発生します。これ、同等のカーネル関数であるKeDelayExecutionThreadのInterval引数について文書化されています。

待機が発生する絶対時間または相対時間を100ナノ秒単位で指定します。負の値は相対時間を示します。絶対有効期限は、システム時間の変更を追跡します。相対的な有効期限は、システム時間の変更による影響を受けません。

于 2010-06-15T16:01:46.887 に答える