waitcommevent 예제

SetCommTimeout 기능은 포트에 대한 통신 시간 시간을 지정합니다. 포트에 대한 현재 시간 시간을 검색하려면 프로그램에서 GetCommTimeouts 함수를 호출합니다. 응용 프로그램은 통신 시간 시간을 수정하기 전에 검색해야 합니다. 이렇게 하면 응용 프로그램이 포트로 완료될 때 시간 시간을 원래 설정으로 다시 설정할 수 있습니다. 다음은 SetCommTimeouts를 사용하여 새 시간 초과를 설정하는 예입니다: GetOverlappedResult가 겹친 작업이 완료될 때까지 기다리는 가장 좋은 방법은 아닙니다. 예를 들어 응용 프로그램이 다른 이벤트 핸들에서 대기해야 하는 경우 첫 번째 코드 조각은 두 번째 코드보다 더 나은 모델로 사용됩니다. WaitForSingleObject에 대한 호출은 WaitForMultipleObjects로 쉽게 변경할 수 있으며 대기할 추가 핸들을 포함합니다. 이것이 MTTTY 샘플 응용 프로그램이 수행하는 것입니다. 예를 들어 다음을 사용하여 발생하는 통신 오류가 발생하는 경우 직렬 회선을 모니터링할 수 있습니다. 예를 들어 기기에 “Hello”를 보내고 싶다고 가정해 보겠습니다(예: 다른 PC).

직렬 포트를 통해 데이터를 보내려면 파일에 쓰는 것처럼 직렬 포트에 데이터를 작성해야 합니다. 다음 API를 사용할 것입니다: Win32 API를 사용하면 포트를 열고 데이터를 보내고 받기가 간단해지지만 곧 직렬 I/O에 더 많은 것이 있다는 것을 알게 되었습니다. 예를 들어, 항상 그렇듯이 이러한 작업이 예상대로 작동하도록 올바른 옵션 집합과 시간 시간 설정 값으로 포트를 구성해야 합니다. 이 문서에서는 직렬 통신에 사용되는 Win32 API 함수를 캡슐화하고 사용을 단순화하는 클래스를 제공합니다. 또한 이 클래스는 데이터를 보내고 받기 위해 별도의 스레드를 쉽게 시작하고 중지할 수 있는 일부 멤버 함수를 제공합니다. 클래스를 사용할 수 있는 방법을 보여 주는 소스 코드 및 일부 샘플 프로그램을 웹 사이트에서 다운로드할 수 있습니다. 볼랜드 C++ 5.01 및 Visual C++ 4.2를 사용하여 코드를 개발하고 테스트했습니다. 이러한 방식으로 이러한 기능을 구현하여 이벤트가 발생할 때까지 기다리는 동안 프로그램을 차단하거나(CheckForCommEvent(TRUE))을 호출하거나 필요에 따라 이벤트에 대한 폴링(CheckForCommEvent(FALSE))을 호출합니다. 반환 값은 발생한 이벤트의 비트 마스크입니다. 사용 가능한 것이 없거나 오류가 발생하면 0입니다. Win32 API와 마찬가지로 WaitCommEvent는 CheckForCommEvent가 0 이 아닌 값을 반환한 후 이벤트 알림을 다시 활성화하려면 다시 호출해야 합니다.

사용의 예는 목록 2의 CommReader 스레드 함수를 참조하십시오. 이 문서와 예제 코드는 CSerialPort 클래스에 가장 일반적으로 사용하는 것을 다룹니다. 나머지 멤버 함수를 자세히 다루는 대신 컴파일러와 함께 제공되는 적절한 Win32 온라인 설명서를 참조합니다. 래퍼 함수는 클래스가 내부적으로 관리하는 생략된 핸들 매개 변수를 제외하고 이름과 형식이 동일합니다. 마지막으로 언급할 만한 한 가지 는 래퍼 함수가 호출로 인한 오류 코드를 추적한다는 것입니다. 인라인 멤버 함수 CSerialPort::GetLastError는 응용 프로그램이 API 수준 ::GetLastError 반환 내용을 변경하는 다른 Win32 함수를 호출한 경우에도 적절한 오류 값을 반환합니다. COM 포트를 설정하기 위한 속성 시트를 포함한 전체 샘플이 이 라이브러리와 함께 제공됩니다. MFC 프로그램에서 이 라이브러리를 사용하는 방법을 예로 들어 SerialTestMFC 프로젝트를 찾습니다.

열려고 하는 모든 직렬 장치는 lpFileName 매개 변수에 대해 동일한 명명 체계를 사용합니다. dwDesiredAccess 매개 변수는 직렬 장치에 액세스하는 방법을 정의하며 0(쿼리 액세스의 경우), GENERIC_READ(읽기 액세스용) 또는 GENERIC_WRITE(쓰기 액세스용)의 조합일 수 있습니다.