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.