.NET Thread.Sleep是否受DST(或系统时间)的影响?

时间:2012-09-12 19:29:24

标签: c# .net windows kernel clock

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

我在谈论DST以及影响Windows机器上时间的任何其他事件。

例如,

,线程.Sleep将阻塞线程从零到infinite毫秒。

如果内核使用与用于一天中的时间相同的“时钟”,则

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

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

N.B。:对于非关键应用程序,这可能是关心?的情况。

对于关键应用程序,知道这个问题的答案很重要,因为的可能性必须为这样的异常条件编程。

谢谢

编辑:我想到了一个我在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);

1 个答案:

答案 0 :(得分:8)

不,Thread.Sleep不受影响。内核还以UTC为单位保留时间。时区和夏令时只是层层叠叠。