我不确定 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);