C # -Zeitgeber, der alle X Sekunden ausgelöst wird, aber synchron mit der Echtzeit bleibt (d. h. ohne Drift)

7

Gibt es in C # einen .NET Timer, der sicherstellen kann, dass zwischen den Ereignissen keine "Drift" auftritt? Das heißt, wenn Sie den Timer alle X Sekunden ausschalten, wird er nach Tagen des Betriebs nicht driften, dh um sicherzustellen, dass die Annäherungsanzahl von X Sekunden Ereignissen an einem Tag mit dem übereinstimmt, was er sein sollte?

Wenn nicht, gibt es ein wohlbekanntes Codebeispiel, das eine Timer-Funktion in C # umschließt?

    
Greg 21.07.2010, 06:30
quelle

2 Antworten

6

Tut mir leid, dass ich Ihnen nur einen Link zu quartz.net gegeben habe, aber dies ist ein voll qualifiziertes Unternehmen, getestet, ... Bibliothek ... Sie müssen das Rad nicht neu erfinden:)

Wenn Sie sich Gedanken über den Overhead machen, wie lautet Ihre Definition für Overhead? ist es die Dateigröße (Binärdateien sind etwa 0,5 MB) oder der Overhead in der Logik. gut für den logik-teil: ich denke, dass die implementierung ihres IJob -interface einen guten job macht, um einen besseren code des konsumenten zu erzwingen. Ich bin nicht so ein großer Freund von Inline-Methoden (nur als Beispiel, wie Sie ihre Zeiger auf Timer abfeuern könnten) - Klassen würden Ihnen viel mehr Möglichkeiten geben, und noch einmal, zwingen Sie besser oop, Domain-Design, .. .

aber: doing Console.WriteLine(...) mit quartz.net wäre übertrieben ...:)

    
Andreas Niedermair 21.07.2010, 06:52
quelle
15

Ich nehme an, Sie haben bereits etwas versucht und es driftet.

Wenn Sie möchten, dass etwa alle 5 Sekunden (5,10,15,20 ..) etwas ausgelöst wird, können Sie den Timer so einstellen, dass er einmal ausgelöst wird. Setzen Sie dann den Timer zurück, um DateTime auszulösen .Now + Anzahl der Sekunden bis zum nächsten 5-Sekunden-Intervall.

Dies verhindert jegliches Driften, solange Ihre Uhr korrekt ist.

So ähnlich

%Vor%     
Mikael Svenson 21.07.2010 06:46
quelle

Tags und Links