TimerManager

Der Kernel betreibt einen Service namens TimerManager. Er kann im Kernel, den Namespaces und in Targets mit getTimerManager() erreicht werden.

Hier können Timer aufgezogen werden, die dann nach Ablauf der Zeit eine Message an das Besitzer-Target schicken. Es gibt Einmal-Timer, welche nach dem Ablauf der Zeit gelöscht werden, und es gibt Mehrfach-Timer, die periodisch versandt werden. Letztere müssen - wenn sie nicht mehr benötigt werden - vom Besitzer gelöscht werden.

Gewöhnliche Timer besitzen an Nutzlast lediglich die RecordID. Sollen auch Daten mitgeschickt werden, ist bei der Reservierung des Timers ein Record-Template zu übergeben. Die Daten in dem Record werden dann jedes mal mitgeschickt.

Timer können jederzeit - auch vor Ablauf ihrer Periode - wieder gelöscht werden. Ebenso können Timer retriggert werden. Dabei wird die abgelaufende Timer-Zeit wieder auf Null gesetzt. Natürlich kann auch geprüft werden, ob ein Timer noch läuft.

Timer sind natürlich nicht echtzeitfähig, aber das ist auch nicht ihr Einsatzzweck. Sie sollten mindestens 10ms laufen, das der Service sowieso keine höhere Auflösung bei der Überprüfung hat.

Timer sind sehr praktisch, um Timeouts zu behandeln, wie z.B. zum Reagieren auf Verbindungsabbrüchen oder nicht zurückkehrende Nachrichten-Antworten.

Wenn ein Target gelöscht wird, obwohl es noch ausstehende Timer hat, werden diese vom System aufgeräumt.