no estoy seguro de cómo el núcleo de Windows maneja el tiempo del hilo ...¿Está afectado .NET Thread.Sleep por los cambios de horario de verano (o del sistema)?
estoy hablando de DST y de cualquier otro evento que afecte la hora del día en los cuadros de Windows.
por ejemplo, el hilo .Sleep bloqueará un hilo de cero a infinite milisegundos.
si el núcleo usa el mismo "reloj" que el utilizado para la hora del día, entonces cuando
(a) alguien manualmente cambia la hora del día, o
(b) algunos de sincronización a una servidor de tiempo cambia la hora del día, o
(c) el horario de verano comienza o termina y el sistema ha sido configurado para responder a estos dos eventos DST,
etcétera, TH
están durmiendo lee de alguna manera afectada? es decir, ¿el kernel maneja tales eventos de tal manera que el programador no necesita hacer nada?
N.B.: para aplicaciones no críticas, ¿es probable que a le interese? situación.
Para aplicaciones críticas, conocer la respuesta a esta pregunta es importante debido a la posibilidad que hay que programar para este tipo de condiciones de excepción.
gracias
edición: pensé en una prueba simple que me quede en LINQPad 4.
la prueba consistió en poner el hilo en modo de suspensión, iniciar un temporizador manual aproximadamente al mismo tiempo que el hilo se colocó en reposo, y luego (a) adelantar el tiempo una hora, luego para la segunda prueba, mover el tiempo atrás dos horas ... en ambas pruebas, el período de sueño fue no afectado.
En pocas palabras: con Thread.Sleep, no hay necesidad de preocuparse por los eventos que afectan la hora del día.
aquí está lo trivial código 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);
Para expandir esto un poco, 'Thread.Sleep' no se ve afectado porque internamente el núcleo usa el conteo de ticks (el número de milisegundos desde que el sistema arrancó) para este tipo de trabajo y no hay forma de ajustar manualmente el tic contar. (En realidad es un poco más complicado, pero los detalles no son importantes.) –
@ Joey thnx; Harry Johnston ha comentado que el kernal usa el conteo de ticks ... ¿UTC también estaría involucrado? – gerryLowry
@ Harry Johnston thnx; solo curiosidad, ¿dónde está esto documentado? esta era mi sospecha, pero no sé dónde está documentado. Dado que el [tick count] (http://msdn.microsoft.com/en-us/library/system.environment.tickcount.aspx) se restablece al inicio del sistema, y es casi seguro que se dejará solo por cualquier ajuste (re) de la hora del día. – gerryLowry