다음을 통해 공유


통신 이벤트

프로세스는 통신 리소스에서 발생하는 이벤트 집합을 모니터링할 수 있습니다. 예를 들어 애플리케이션은 이벤트 모니터링을 사용하여 CTS(전송 지우기) 및 DSR(데이터 세트 준비) 신호가 상태를 변경하는 시기를 결정할 수 있습니다.

프로세스는 SetCommMask 함수를 사용하여 이벤트 마스크를 만들어 지정된 통신 리소스의 이벤트를 모니터링할 수 있습니다. 통신 리소스에 대한 현재 이벤트 마스크를 확인하려면 프로세스에서 GetCommMask 함수를 사용할 수 있습니다. 다음 값은 모니터링할 수 있는 이벤트를 지정합니다.

의미
EV_BREAK 입력에서 중단이 발견되었습니다.
EV_CTS CTS(전송 취소) 신호가 상태를 변경했습니다.
EV_DSR DSR(데이터 세트 준비) 신호가 상태가 변경되었습니다.
EV_ERR 줄 상태 오류가 발생했습니다. 줄 상태 오류는 CE_FRAME, CE_OVERRUNCE_RXPARITY.
EV_RING 링 표시기가 감지되었습니다.
EV_RLSD RLSD(receive-line-signal-detect) 신호가 변경된 상태입니다.
EV_RXCHAR 문자를 받아서 입력 버퍼에 배치했습니다.
EV_RXFLAG 이벤트 문자가 수신되어 입력 버퍼에 배치되었습니다. 이벤트 문자는 SetCommState 함수를 사용하여 직렬 포트에 적용되는 디바이스의 DCB 구조에 지정됩니다.
EV_TXEMPTY 출력 버퍼의 마지막 문자가 전송되었습니다.

 

이벤트 집합을 지정한 후 프로세스는 WaitCommEvent 함수를 사용하여 이벤트 중 하나가 발생할 때까지 기다립니다. WaitCommEvent 는 동기적으로 또는 겹치는 작업으로 사용할 수 있습니다. 함수를 겹치는 작업으로 실행하는 방법에 대한 자세한 내용은 동기화를 참조 하세요.

이벤트 마스크에 지정된 이벤트 중 하나가 발생하면 프로세스는 대기 작업을 완료하고 이벤트 마스크 변수를 설정하여 검색된 이벤트의 유형을 나타냅니다. 해당 리소스에 대한 대기가 보류 중인 동안 통신 리소스에 대해 SetCommMask 가 호출되면 WaitCommEvent 는 오류를 반환합니다.

WaitCommEvent 함수는 SetCommMask 또는 WaitCommEvent에 대한 마지막 호출 이후 발생한 이벤트를 검색합니다. 예를 들어 EV_RXCHAR 이벤트를 대기 만족 이벤트로 지정하면 WaitCommEvent 또는 SetCommMask에 대한 마지막 호출 이후 도착한 드라이버의 입력 버퍼에 문자가 있는 경우 WaitCommEvent 호출이 충족됩니다. 따라서 다음 의사 코드를 고려할 때 T1과 T2 사이에 수신된 모든 문자는 WaitCommEvent에 대한 다음 호출을 충족합니다.

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

T2: 
}

신호(CTS, DSR 등)가 상태를 변경할 때 발생하는 이벤트를 모니터링할 때 WaitCommEvent 는 변경 내용을 보고하지만 현재 상태는 보고하지 않습니다. CTS의 현재 상태(전송 지우기), DSR(데이터 집합 준비), RLSD(receive-line-signal-detect) 및 링 표시기 신호를 쿼리하기 위해 프로세스는 GetCommModemStatus 함수를 사용할 수 있습니다.