8

Windows カーネルがスレッドのタイミングを処理する方法がわかりません ...

私は DST と、Windows ボックスの時刻に影響を与えるその他のイベントについて話しています。

たとえば、 Thread .Sleepはスレッドをゼロから無限ミリ秒までブロックします。

カーネルが時刻に使用されるものと同じ「クロック」を使用する場合、いつ

(a) 誰かが手動で時刻を変更した場合、または
(b) タイム サーバーへの何らかの同期によって時刻が変更された場合、または
(c) 夏時間の開始または終了時にシステムがこれら 2 つの DST イベントに応答するように構成されている場合
など、_

スリープ状態のスレッドは何らかの影響を受けますか? つまり、カーネルはそのようなイベントを、プログラマーが何もする必要がないような方法で処理しますか?

NB :重要でないアプリケーションの場合、これは誰が気にする可能性がありますか? 状況。

重要なアプリケーションでは、このような例外条件をプログラムしなければならない可能性があるため、この質問に対する答えを知ることが重要です。

ありがとうございました

編集: LINQPad 4で実行した簡単なテストを考えました。

このテストでは、スレッドをスリープ状態にし、スレッドがスリープ状態になるのとほぼ同時に手動タイマーを開始し、(a) 時間を 1 時間進めてから、2 番目のテストで時間を 2 時間戻します。 ...両方のテストで、睡眠時間は影響を受けませんでした。

結論: Thread.Sleep を使用すると、時刻に影響するイベントについて心配する必要はありません。

簡単な C# コードは次のとおりです。

Int32   secondsToSleep;
String  seconds; 
Boolean inputOkay;
Console.WriteLine("How many seconds?");
seconds   = Console.ReadLine();
inputOkay = Int32.TryParse(seconds, out secondsToSleep); 
if (inputOkay)
{
    Console.WriteLine("sleeping for {0} second(s)", secondsToSleep);
    Thread.Sleep(secondsToSleep * 1000);
    Console.WriteLine("i am awake!");
}
else Console.WriteLine("invalid input:  [{0}]", seconds);
4

1 に答える 1

8

いいえ、Thread.Sleep影響はありません。さらに、カーネルは UTC のみで時刻を保持します。タイムゾーンと DST は、その上に重なっています。

于 2012-09-12T19:30:59.557 に答える