Wpis z mikrobloga

#programowanie #csharp #seasharp (to dla wyjątkowych płatków śniegu i #pdk)

dobra, więc naczytałem się na stacku tematów o System.Timers.Timer i System.Threading.Timer(głównie z tych korzystam w czymkolwiek co piszę) i dobra, jasne, windows to nie OS czasu rzeczywistego, ale naprawdę różnice są tak znaczące? ok, w gotowaniu jajek nie zrobi mi to wielkiej różnicy czy wyjściu na autobus, ale jakbym chciał zaplanować precyzyjnie event to co?

scenariusz taki: chcę równo za dwa tygodnie(nie za dwa tygodnie o 20:30, ale za dwa tygodnie od kliknięcia przycisku) zaplanować wyświetlenie msgboxa, nie wnikając w cel tego po co.
napisałem prostą aplikację testującą timery i wychodzi na to, że przy 10min tracę jakieś 9.5sec(w sensie, opóźnienia). co teraz?

mam właściwie dwa pomysły tylko, których realizacja sprowadza się do tego samego
a) albo zapisujemy sobie DateTime.Now, dodajemy 14 dni i sprawdzamy czy się zgadza co kilka sekund a jeżeli będziemy powiedzmy w przedziale (0,5)sec to przerzucamy się na metodę sprawdzającą co mniejszy interwał?
b) System.Threading.Timer(callback, null, eventTime.substract(DateTime.Now).TotalMilliseconds,0) i ustawiamy interwał na połowę czasu jaki pozostał do momentu, gdy zostało np. poniżej 1sek, gdzie używamy rozwiązania z punktu a?

tak czy inaczej trzeba coś przyjąć za prawidłowe źródło czasu, a skoro czas systemowy i tak się automatycznie synchronizuje, to "czemu nie", pozostaje tylko kwestia zużycia zasobów i czasu.
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ilmash: Ja timerów nie lubię, zrobiłbym wątek, który w pętli sprawdza ile zostało czasu i spał połowę tego co zostało i jeśli zostało już bardzo nie wiele (<50ms) to sprawdzał bez spania. Ale podobnie można zrobić i timerami.
  • Odpowiedz
@extern-int: w sumie prostsze, faktycznie. timer w istocie to przecież specyficzne opakowanie a System.Timers.Timer korzysta z Threading.Timer z callbackiem na siebie, więc niby są takie same.
  • Odpowiedz
@ilmash: Jeżeli to nie jakieś środowisko serwerowe to wątpie że będziesz miał uptime ponad 2 tygodnie. Nie lepiej użyć systemowego harmonogramu zadań?
  • Odpowiedz