1

1ミリ秒までの精度を意味するのではなく、 を使用して1時間の遅延が必要な状況について質問していSleep(60 * 60 * 1000)ます。55 分や 70 分ではなく、1 時間になりますか? スレッドはウェイクアップし、永遠にスリープしないことが保証されていますか?

4

1 に答える 1

2

1 時間以上、Sleep() 呼び出しの精度はそれほど悪くありません (テストもかなり簡単です)。Sleep() 呼び出しは、手動のストップウォッチではエラーを特定できないほど十分に近い時間に返されます (XP で試してみましたが、今は違うという理由はありません。AFAIK)。

エラー wrt。もちろん、Sleep(3600*1000) が連続して呼び出された場合、特に各間隔の最後に実行された操作自体が長かったり、ボックスが深刻に過負荷になっている場合 (つまり、より多くの準備ができているスレッド)、経過時間は累積されます。よりコア)。

1 時間スリープするように要求すると、スレッドが永遠にスリープするのはなぜですか? Sleep(3600*1000) を呼び出すと、その時間後に準備が整います。そうでない場合は、とにかく OS が動作していないため、再起動する必要があります。

このような Sleep() 呼び出しがタイマーよりも優先される理由は、それがワンライナーであり、呼び出し元スタックのどこでも機能するためです。タイマー コールバックを処理するメッセージ ハンドラーやステート マシンは必要ありません。

于 2012-11-07T21:24:14.697 に答える