8

我不确定 Windows 内核如何处理线程计时...

我说的是 DST 和任何其他影响 Windows 机器上一天中时间的事件。

例如, Thread .Sleep将阻塞线程从零到无限毫秒。

如果内核使用与一天中的时间相同的“时钟”,那么当

(a) 有人手动更改时间,或
(b) 与时间服务器的某些同步更改了时间,或
(c) 夏令时开始或结束并且系统已配置为响应这两个 DST 事件,
等等,

睡眠线程是否受到任何影响?即,内核是否以程序员不需要做任何事情的方式处理此类事件?

注意:对于非关键应用程序,这可能是一个谁在乎?情况。

对于关键应用程序,知道这个问题的答案很重要,因为可能必须针对此类异常情况进行编程。

谢谢你

编辑:我想到了一个我在LINQPad 4中运行的简单测试。

测试涉及使线程进入睡眠状态,在线程进入睡眠状态的大约同一时间启动手动计时器,然后(a)将时间提前一小时,然后对于第二次测试,将时间向后移动两个小时...在这两项测试中,睡眠时间都没有受到影响。

底线:使用 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 回答