class CxiMessageHandlerWithQueue : public CxiMessageHandler
CxiMessageHandlerWithQueue ist die zweite Unterstufe des erweiterten Meldungssystems.
Während alle bisherigen Meldungsklassen je nach System kleine Unterschiede aufwiesen, um eine optimale Speicher- und Zeitnutzung zu erzielen, stellt diese Klasse ein unter allen Systemen gleiches Schnittstellenverhalten zur Verfügung:
Alle Meldungen werden asynchron verschickt, es erfolgt keine Synchronisierung.
Ein rekursiver Aufruf der Handlerfunktion erfolgt nur, wenn dies explizit angefordert wird.
Der vom Sender verschickte Datenblock wird in keiner Weise verändert, er kann den Status cxiOptReadOnly besitzen.
Um diese Bedingungen zu erfüllen, verwendet diese Klasse eine lokale 'Message Queue', die alle empfangenen Meldungen aufnimmt, bis sie verarbeitet werden können.
Um einen erweiterten Meldungssender und -empfänger zu definieren, sollte eine Ableitung dieser Klasse erstellt werden, wobei die virtuelle Funktion Handler2 überschrieben wird.
Die Klasse sammelt die eintreffenden Teilmeldungen und fügt sie wieder zu einem CXI-Baum zusammen. Dieser wird danach in eine Queue gestellt, die sie einzeln als Parameter an die Funktion Handler2 übergibt. Nach der Rückkehr wird die Verarbeitung als beendet betrachtet und der Baum gelöscht, es erfolgt keine Rückübertragung zum Absender.
Während das Objekt vom Typ CxiMessageHandlerWithQueue existiert, können beliebige Prozesse mit der geerbten Funktion Post Meldungen an diesen Empfänger schicken. Sie müssen dazu lediglich den symbolischen Namen kennen.
ACHTUNG: Bevor ein CxiMessageHandler...-Objekt gelöscht werden kann, muss der Handler verlassen werden. Programme können abstürzen, wenn sich beim Löschen des Objekts gerade eine Meldung in Bearbeitung befindet. Daher wurde mit RequestShutDown und QueryReceiverState eine Möglichkeit geschaffen, das Beenden eines Empfängers asynchron anzustoßen. Innerhalb von Destruktoren sollte WaitShutDown() aufgerufen werden. Diese Funktion wartet, bis sich keine Meldungen mehr in Verarbeitung befinden, dann deaktiviert sie den Empfänger. Erst jetzt kann das Receiver-Objekt gefahrlos gelöscht werden. Die von CXI selbst zur Verfügung gestellten Destruktoren rufen WaitShutDown() automatisch auf.
Portabilität:
Diese Klasse ist in allen unterstützten Systemen verfügbar, unter DOS müssen sich Sender und Empfänger im gleichen Programm befinden.
Memberfunktionen:
CxiMessageHandlerWithQueue(...) - Konstruktor
PreHandler - Abfangen von Meldungen
CountQueue - Anzahl Meldungen in der Queue
PollQueue - Eine Meldung abarbeiten
ExecuteQueueUntilEmpty - Alle Meldungen abarbeiten
ExecuteQueueUntilError - Meldungen abarbeiten bis Fehler
ZapQueue - Queue löschen
LockQueue - Automatisches Abarbeiten verhindern
UnLockQueue - Automatisches Abarbeiten ermöglichen
Geerbte Memberfunktionen:
Handler2 - Bearbeitungsfunktion für empfangene Meldungen
WaitState - Wartezustand
Post - Verschicken einer erweiterten Meldung
Pass - Weiterleiten einer empfangenen Meldung
IsInHandler - Ist der Handler aktiv?
QueryReceiverState - Aktivierungsstatus
RequestShutDown - Herunterfahren eines Empfängers
Siehe auch:
Klassenhierarchie Meldungssystem
class CxiMessageHandlerBase - Basisempfänger
PostMessageBlock
SendMessageBlock (mit Beispiel)
class CxiMessageHandler - Erweiterter Meldungsempfänger ohne Queue
Treiber für externe Meldungen
|