Timer oder Thread Funktions-Zeitsequenzen?
-
Eine Funktion soll z.B. alle 250 Millisekunden aufgerufen werden.
Nimmt man besser nen Thread und lässt den zwischendurch schlafen, oder nen Timer?MfG
-
Ich würde nen Timer nutzen, es ist viel aufwändiger nen Thread zu kontrollieren und den Vernünftig schlafen zu schicken und aufzuwecken, als das einfach nen Timer machen zu lassen.
-
Timer
-
Aber denk daran, das abhängig des Timers die methode /Delegate zyklisch deines intervals aufgerufen wird. Dauer die verarbeitung deiner methode länger als das interval könnte es evtl. problem deinerseits geben..
-
macht ein timer nicht auch einfach nen neuen thread auf? ich denke zwar auch das ein timer einfacher ist, aber ich würde das lieber in einen eigenen thread legen da wie schon gesagt bei einem asyncronen aufruf evtl probleme auftauchen könnten wenn die methode vom vohrigen durchlauf noch nicht beendet wurde.
und einen thread schlafen lassen ist ja nichts grossartiges oder?
System.Threading.Thread.Sleep((int)deinInterval);
-
Mit nem Thread hast du die selben Probleme wie mit dem Timer, und wie willst du nen Thread aller 250ms starten lassen, übern Timer?:P Wenn die Methode eben zu lange dauert, dann ist das pech des Entwicklers und er muss an der MEthode schrauben, oder sich eben nen Queueingsystem bauen.
Edit: Zumal sleep einfach mal alles Blockiert was gerade rennt. Also Sleep zu verwenden ist eher kontraproduktiv.
-
denjo303 schrieb:
macht ein timer nicht auch einfach nen neuen thread auf?
Kommt ganz auf den Timer drauf an. In C# gibt es mindestens 4 Timer Klassen mit unterschiedlichen Aufgabenfelder:
System.Threading.Timer
(allgemein)
System.Timers.Timer
(Server)
System.Windows.Forms.Timer
(WinForms)
System.Windows.Threading.DispatcherTimer
(WPF)Die letzten beiden Timer arbeiten nicht in einem eigenen Thread, weshalb sie sehr praktisch für UI-Arbeit sind. Allerdings sind sie auch etwas ungenauer, da es keine Garantie für die genaue Ausführungszeit gibt. Allerdings gibt es diese auf einem nicht Echtzeitbetriebsystem sowieso nicht.
Ich würde übrigens einen Timer ganz klar vorziehen. Schliesslich sind diese Klassen bereits für diese Aufgabe geschaffen. Der
System.Threading.Timer
verwendet zum Beispiel automatisch einen Threadpool des Systems. Das spart Ressourcen.Grüssli