Udostępnij przez


Zdarzenia komunikacji

Proces może monitorować zestaw zdarzeń występujących w zasobie komunikacji. Na przykład aplikacja może użyć monitorowania zdarzeń, aby określić, kiedy usługa CTS (wyczyść do wysłania) i DSR (data-set-ready) sygnalizuje zmianę stanu.

Proces może monitorować zdarzenia w danym zasobie komunikacji przy użyciu funkcji SetCommMask w celu utworzenia maski zdarzeń. Aby określić bieżącą maskę zdarzeń dla zasobu komunikacji, proces może użyć funkcji GetCommMask. Poniższe wartości określają zdarzenia, które można monitorować.

Wartość Znaczenie
EV_BREAK Wykryto przerwę na danych wejściowych.
EV_CTS Stan zmiany sygnału CTS (wyczyść do wysłania).
EV_DSR Stan zmiany sygnału DSR (gotowego do zestawu danych).
EV_ERR Wystąpił błąd stanu wiersza. Błędy stanu wiersza to CE_FRAME, CE_OVERRUNi CE_RXPARITY.
EV_RING Wykryto wskaźnik pierścienia.
EV_RLSD Stan zmian sygnału RLSD (receive-line-signal-detect).
EV_RXCHAR Odebrano znak i umieszczono go w buforze wejściowym.
EV_RXFLAG Odebrano i umieszczono znak zdarzenia w buforze wejściowym. Znak zdarzenia jest określony w strukturze DCB urządzenia, która jest stosowana do portu szeregowego przy użyciu funkcji SetCommState.
EV_TXEMPTY Ostatni znak w buforze wyjściowym został wysłany.

 

Po określeniu zestawu zdarzeń proces używa funkcji waitcommevent czekać na jedno z zdarzeń. WaitCommEvent można używać synchronicznie lub jako nakładające się operacje. Aby uzyskać dodatkowe informacje na temat wykonywania funkcji jako nakładającej się operacji, zobacz Synchronization.

Gdy wystąpi jedno ze zdarzeń określonych w masce zdarzeń, proces kończy operację oczekiwania i ustawia zmienną maski zdarzeń, aby wskazać typ wykrytego zdarzenia. Jeśli SetCommMask jest wywoływana dla zasobu komunikacji, podczas gdy oczekiwanie na ten zasób jest oczekujące, WaitCommEvent zwraca błąd.

Funkcja WaitCommEvent wykrywa zdarzenia, które wystąpiły od ostatniego wywołania SetCommMask lub WaitCommEvent. Jeśli na przykład określisz zdarzenie EV_RXCHAR jako zdarzenie satysfakcjonujące oczekiwanie, wywołanie WaitCommEvent będzie zadowalające, jeśli istnieją znaki w buforze wejściowym sterownika, które dotarły od ostatniego wywołania do WaitCommEvent lub SetCommEvent. W związku z tym, biorąc pod uwagę następujący pseudokod, wszystkie znaki odebrane między T1 i T2 spełnią następne wywołanie WaitCommEvent.

while (!bFinished) 
{ 
    WaitCommEvent(args)
 
T1: // Read bytes 
    // Process bytes 

T2: 
}

Podczas monitorowania zdarzenia, które występuje, gdy sygnał (CTS, DSR itd.) zmienia stan, WaitCommEvent zgłasza zmianę, ale nie bieżący stan. Aby wysłać zapytanie dotyczące bieżącego stanu usługi CTS (wyczyść do wysłania), praw podmiotu danych (gotowego do zestawu danych), zabezpieczeń na poziomie wiersza (odbierania sygnału sygnału) i sygnałów wskaźnika pierścienia, proces może użyć funkcji GetCommModemStatus.