我不确定 Windows 内核如何处理线程时序......
我说的是 DST 和任何其他影响 Windows 机器上一天中的时间的事件。
例如,线程 .Sleep将阻塞从零到 infinite 的线程毫秒。
如果内核使用与一天中的时间相同的“时钟”,那么什么时候
(a) 有人手动更改一天中的时间,或者
(b) 与时间服务器的某些同步改变了一天中的时间,或者
(c) 夏令时开始或结束,系统已配置为响应这两个 DST 事件,
等等,
休眠线程是否受到任何影响?即,内核是否以程序员无需执行任何操作的方式处理此类事件?
注意:对于非关键应用程序,这可能是谁在乎?情况。
对于关键应用程序,知道这个问题的答案很重要,因为可能必须针对此类异常情况进行编程。
谢谢
编辑:我想到了一个我在 LINQPad 4 中运行过的简单测试.
测试涉及让线程进入休眠状态,在线程进入休眠状态的大约同一时间启动手动计时器,然后 (a) 将时间提前一小时,然后在第二次测试中,将时间提前倒退两个小时……在这两项测试中, sleep 时间未受到影响。
底线:使用 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);
最佳答案
不,Thread.Sleep
不受影响。内核还专门以 UTC 格式保存时间。时区和夏令时就在上面。
关于c# - .NET Thread.Sleep 是否受 DST(或系统时间)更改的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12394991/