2013-02-11 17 views
8

Używam timera z przestrzeni nazw Timers. Co dzieje się z zegarem, gdy komputer przechodzi w tryb uśpienia lub hibernacji?Co dzieje się z zegarem w trybie gotowości?

Mam timer ustawiony na 6 godzin opóźnienia.

Co stanie się w takich sytuacjach.

1) Zegar rozpoczyna pracę o godzinie 0 i natychmiast przechodzi w tryb uśpienia/hibernacji. Następnie komputer budzi się o godzinie 5. Czy mój timer się uruchomi po następnej godzinie lub po następnych 6 godzinach?

2) Zegar rozpoczyna pracę o godzinie 0 i natychmiast przechodzi w tryb uśpienia/hibernacji. Następnie komputer budzi się o godzinie 7. Czy mój zegar się uruchomi, gdy tylko komputer się przebudzi, czy "przegapi" to jeden raz i wystrzeli w ciągu 5 godzin? Czy zacznie się liczyć do następnego zdarzenia od czasu przebudzenia komputera lub z poprzedniego "nieodebranego" wydarzenia?

+0

To jest coś, co możesz łatwo sprawdzić samodzielnie. Wypróbuj i opublikuj odpowiedź. –

+0

Jakie były wyniki, gdy próbowano, powiedzmy, 5 minut. Lub jeszcze nie próbowałeś? – I4V

+0

@HansPassant Powiedziałem na początku mojego pytania, że ​​nie jestem w stanie przetestować go teraz. – Hooch

Odpowiedz

19

Ok. poprosiłem mojego przyjaciela, a to są jego resutls:

23:21:32 : Timer started 
23:21:35 : PC Goes Sleep 
23:22:50 : PC Wakes 
23:22:50 : Timer fired 
23:23:50 : Timer fired 

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 

namespace Test 
{ 
    class Program 
    { 
     static System.Timers.Timer timer; 

     static void Main(string[] args) 
     { 
      timer = new System.Timers.Timer(); 
      timer.Interval = 60 * 1000; 
      timer.AutoReset = true; 
      timer.Elapsed += timer_Elapsed; 
      timer.Enabled = true; 

      Console.WriteLine(String.Format("{0}:{1}:{2} : Timer started", DateTime.Now.ToLocalTime().Hour, DateTime.Now.ToLocalTime().Minute, DateTime.Now.ToLocalTime().Second)); 

      timer.Start(); 

      Thread.Sleep(Timeout.Infinite); 
     } 

     static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
     { 
      Console.WriteLine(String.Format("{0}:{1}:{2} : Timer fired", DateTime.Now.ToLocalTime().Hour, DateTime.Now.ToLocalTime().Minute, DateTime.Now.ToLocalTime().Second)); 
     } 
    } 
} 

Tak w skrócie. Po przejściu do trybu uśpienia i budzenia sprawdza, czy nie przeoczyło żadnego zdarzenia. Jeśli przeoczysz jeden, rozpocznie się odliczanie do następnego zdarzenia od 0.

+3

-1 dla pytania, ale +1 dla odpowiedzi . – I4V

+2

@ I4V why -1 ?? To dobre pytanie, a Hooch sam to sprawdził, ponieważ nikt nie zna poprawnej odpowiedzi. Wspaniały! Uratował mi czas) –