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

ger*_*wry 7 .net c# windows kernel clock

我不确定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);
Run Code Online (Sandbox Code Playgroud)

Joe*_*oey 8

不,Thread.Sleep不受影响.内核还以UTC为单位保留时间.时区和DST就在上面.

  • 稍微扩展一下,`Thread.Sleep` 不受影响,因为内核在内部使用滴答计数(自系统启动以来的毫秒数)进行此类作业,并且无法手动调整滴答计数。(实际上有点复杂,但细节并不重要。) (2认同)