OOStuBS/MPStuBS
|
Verwaltung und Anstoßen von zeitgesteuerten Aktivitäten. Mehr ...
#include <bellringer.h>
Öffentliche Methoden | |
Bellringer () | |
Konstruktor. Mehr ... | |
void | check () |
Prüft, ob Glocken zu läuten sind und tut es gegebenenfalls. Mehr ... | |
void | job (Bell *bell, unsigned int ms) |
Die Glocke bell wird dem Glöckner überantwortet. Sie soll nach ms Millisekunden geläutet werden. Mehr ... | |
void | cancel (Bell *bell) |
Die Glocke bell soll nun doch nicht geläutet werden. Mehr ... | |
bool | bell_pending () |
Ist eine Glocke eingehangen? Mehr ... | |
Private Attribute | |
Queue< Bell, &Bell::bellringer_link > | bells |
Die Liste der Glocken die gerade verwaltet wird. Mehr ... | |
Verwaltung und Anstoßen von zeitgesteuerten Aktivitäten.
Der "Glöckner" (Bellringer) wird regelmäßig aktiviert und prüft, ob irgendwelche "Glocken" (Bell-Objekte) läuten müssen. Die Glocken befinden sich in einer Liste, die der Glöckner verwaltet. Eine geschickte Implementierung vermeidet, bei jeder Aktivierung die gesamte Liste zu durchlaufen.
Auf diese Weise erreicht man eine Komplexität vom O(1) im Timer Interrupt, sofern keine Glocke aktiviert werden muss.
|
inline |
Konstruktor.
bool Bellringer::bell_pending | ( | ) |
Ist eine Glocke eingehangen?
void Bellringer::cancel | ( | Bell * | bell | ) |
Die Glocke bell soll nun doch nicht geläutet werden.
bell | Die Glocke, die nicht geläutet werden soll. |
void Bellringer::check | ( | ) |
Prüft, ob Glocken zu läuten sind und tut es gegebenenfalls.
Bei jedem Aufruf von check vergeht ein Tick. Wenn das Ticken einer Glocke dazu führt, dass sie ihre Zeit abgelaufen ist, wird sie geläutet.
void Bellringer::job | ( | Bell * | bell, |
unsigned int | ms | ||
) |
Die Glocke bell wird dem Glöckner überantwortet. Sie soll nach ms Millisekunden geläutet werden.
bell | Glocke, die nach ms Millisekunden geläutet werden soll. |
ms | Millisekunden, die abgewartet werden sollen, bevor die Glocke bell geläutet wird. |
|
private |
Die Liste der Glocken die gerade verwaltet wird.
In dieser Liste sind die Glocken, die von job() eingetragen wurden und noch nicht abgelaufen sind. Sie werden bei jedem check() überprüft.
Als Verkettungszeiger wird das Bell::bellringer_link Feld verwendet.