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 das CTS-Signal (clear-to-send) und das DSR-Signal (Dataset bereit) den Zustand ändern.
Ein Prozess kann Ereignisse für eine bestimmte Kommunikationsressource überwachen, indem er die SetCommMask-Funktion 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 (Dataset ready) hat den Zustand geändert. |
EV_ERR | Es ist ein Zeilen-status-Fehler aufgetreten. Line-status-Fehler werden 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 eine Reihe von Ereignissen 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 überlappenden Vorgang finden Sie unter Synchronisierung.
Wenn eines der in der Ereignismaske angegebenen Ereignisse auftritt, schließt der Prozess den Wartevorgang ab und legt eine Ereignisformatvariable fest, die den Typ des erkannten Ereignisses angibt. Wenn SetCommMask für eine Kommunikationsressource aufgerufen wird, während eine Wartezeit für diese Ressource 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 z. B. das EV_RXCHAR-Ereignis als wartezufriedendes Ereignis angeben, wird ein Aufruf von WaitCommEvent erfüllt, wenn Zeichen im Eingabepuffer des Treibers 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 der CTS-Signale (clear-to-send), DSR (Dataset ready), RLSD (receive-line-signal-detect) und Ringanzeigen abzufragen.