Kommunikationsereignisse
Ein Prozess kann eine Reihe von Ereignissen überwachen, die in einer Kommunikationsressource auftreten. Beispielsweise kann eine Anwendung die Ereignisüberwachung verwenden, um zu bestimmen, wann sich die Signale CTS (clear-to-send) und DSR (data-set-ready) ändern.
Ein Prozess kann Ereignisse für eine bestimmte Kommunikationsressource überwachen, indem er die Funktion SetCommMask verwendet, um eine Ereignismaske zu erstellen. Um die aktuelle Ereignismaske für eine Kommunikationsressource zu bestimmen, kann ein Prozess die GetCommMask-Funktion verwenden. Die folgenden Werte geben Ereignisse an, die überwacht werden können.
| Wert | Bedeutung |
|---|---|
| EV _ BREAK | Bei der Eingabe wurde ein "break" erkannt. |
| EV _ CTS | Das CTS-Signal (Clear-to-Send) hat den Zustand geändert. |
| EV _ DSR | Das DSR-Signal (data-set-ready) hat den Zustand geändert. |
| EV _ ERR | Ein Zeilenstatusfehler ist aufgetreten. Zeilenstatusfehler sind CE _ FRAME, CE _ OVERRUN und CE _ RXPARITY. |
| EV _ RING | Ein Ringindikator wurde erkannt. |
| EV _ RLSD | Das RLSD-Signal (receive-line-signal-detect) hat den Zustand geändert. |
| EV _ RXCHAR | Ein Zeichen wurde empfangen und im Eingabepuffer platziert. |
| EV _ RXFLAG | Das Ereigniszeichen wurde empfangen und im Eingabepuffer platziert. Das Ereigniszeichen wird in der DCB-Struktur des Geräts angegeben, die mithilfe der SetCommState-Funktion auf einen seriellen Port angewendet wird. |
| EV _ TXEMPTY | Das letzte Zeichen im Ausgabepuffer wurde gesendet. |
Nachdem ein Ereignissatz angegeben wurde, verwendet ein Prozess die WaitCommEvent-Funktion, um auf das Auftreten eines der Ereignisse zu warten. WaitCommEvent kann synchron oder als überlappender Vorgang verwendet werden. Weitere Informationen zum Ausführen einer Funktion als überlappender Vorgang finden Sie unter Synchronisierung.
Wenn eines der in der Ereignismaske angegebenen Ereignisse auftritt, schließt der Prozess den Wartevorgang ab und legt eine Ereignismaskenvariable fest, um den Typ des erkannten Ereignisses anzugeben. Wenn SetCommMask für eine Kommunikationsressource aufgerufen wird, während für diese Ressource eine Wartezeit aussteht, gibt WaitCommEvent einen Fehler zurück.
Die WaitCommEvent-Funktion erkennt Ereignisse, die seit dem letzten Aufruf von SetCommMask oder WaitCommEvent aufgetreten sind. Wenn Sie beispielsweise das EV _ RXCHAR-Ereignis als ereigniserfüllendes Ereignis angeben, wird ein Aufruf von WaitCommEvent erfüllt, wenn im Eingabepuffer des Treibers Zeichen vorhanden sind, die seit dem letzten Aufruf von WaitCommEvent oder SetCommMask eingetroffen sind. Daher erfüllen alle zwischen T1 und T2 empfangenen Zeichen bei folgendem Pseudocode den nächsten Aufruf von WaitCommEvent.
while (!bFinished)
{
WaitCommEvent(args)
T1: // Read bytes
// Process bytes
T2:
}
Beim Überwachen eines Ereignisses, das auftritt, wenn ein Signal (CTS, DSR usw.) den Zustand ändert, meldet WaitCommEvent die Änderung, aber nicht den aktuellen Zustand. Ein Prozess kann die GetCommModemStatus-Funktion verwenden, um den aktuellen Zustand von CTS (Clear-to-Send), DSR (data-set-ready), RLSD (receive-line-signal-detect) und Ringindikatorsignalen abzufragen.