Was passiert, wenn ein Timer nicht alle Arbeiten beendet, bevor die neue Zykluszeit eintrifft?
Nehmen wir an, wir haben einen timer, der alle 10 Minuten fährt. Was ist, wenn der Zyklus seiner Bearbeitung dauert mehr als 10 Minuten. Macht einen neuen thread startet? Wird es unterbricht seinen derzeitigen Betrieb? Was ist, wenn ein einzelnes Objekt mutiert ist innerhalb der timer?
Sorry, wenn ich nicht erwähnen, jeder code, weil das problem ist klar und ich möchte auch wissen, die ganze Antwort aus der Sicht eines multi-threaded Programmierung geek eher als die Suche nach einer lockeren Antwort, indem Sie versuchen, es zu testen, über eine Beispiel-Anwendung. Eigentlich will ich wissen, die Logik, die hinter der Wirkungsweise.
InformationsquelleAutor der Frage Farshid | 2012-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
System.Threading.Timer
oderSystem.Timers.Timer
, wird der timer tick wieder, starten einen neuen thread. Sehen https://stackoverflow.com/a/10442117/56778 für einen Weg, dieses problem zu vermeiden.Wenn Sie
System.Windows.Forms.Timer
, dann einen neuen tick nicht auftreten, bis das Vorherige abgeschlossen.InformationsquelleAutor der Antwort Jim Mischel
Fügen Sie Ihren code in eine
Monitor.TryEnter()
InformationsquelleAutor der Antwort rare
um Reentranz zu vermeiden, können Sie eine statische boolean, der sagt, ob die Funktion bereits beeing ausgeführt. Benutzer einen try/Catch/finally und setzen Sie diese boolean auf false in der schließlich, um sicherzustellen, dass die boolean bleiben nicht falsch, wenn du einen Fehler im code oder wenn der code versagt.
Für eine schnellere timer, Reentranz sollte verhindert werden, indem semaphore (mutex).
InformationsquelleAutor der Antwort GameAlchemist