2014-05-24 1 views
0

내 논문에서는 Visual C++로 작성된 응용 프로그램을 제공하고 gps 데이터 (NMEA 183 (RMC))를 수신하는 MFC를 사용하여 데이터를 UDP 및/또는 직렬 포트 COM 포트) (별도로 또는 함께 작업해야 함). 응용 프로그램의 UDP 부분 및 그 작업 (전에 내 다른 학생에 의해 쓰여진), 그래서 직렬 포트 부분을 완료 할 수 있지만 여기에 내 문제가 온다, 그것은 MFC COM 포트를 지원하지 않는 것으로 밝혀졌다 또는 적어도 않습니다. 직렬 포트에 대한 클래스가 있지만 인터넷에서 시리얼 포트 구현을 찾았습니다 : LINK,하지만 그것을 통합하고 작동하게하는 방법을 모릅니다. UDP 부분이 가상을 사용하는 메커니즘을 트리거하는 이벤트처럼 작동하는 것으로 나타났습니다. 함수 CAsyncSocket :: OnReceive. 직렬 포트로 작업하는 것과 비슷한 것을 만들 수 있는지 궁금합니다.직렬 포트를 사용하는 MFC 응용 프로그램

도움 주셔서 감사합니다. 최고 감사합니다.

+1

입니다. MFC는 * 전체 * winapi를 감싸는 것처럼 보이지 않습니다. 시리얼 포트의 winapi 기능은 이미 꽤 높은 수준이며 많은 구현 세부 사항을 숨기고 있습니다. Boost의 asio는 모든 운영 체제에서 작동해야하기 때문에 불완전하게 래핑합니다. 배가 이미 항해했을 것입니다. 너 스스로 그것을 포장해야합니다. 꽤 괜찮은 학생 운동. –

답변

2

프로그램이 GUI 인 경우 별도의 작업자 스레드에서 직렬 포트 코드를 실행하는 것이 좋습니다. ReadFile은 직렬 데이터를 가져 오는 데 오랜 시간이 걸릴 수 있으며 주 스레드에서 완료된 경우 GUI 메시지 처리를 차단합니다. 직렬 스레드에서 메인 (GUI) 스레드로 알림 이벤트를 제공하려면 PostMessage를 사용자 정의 메시지와 함께 사용할 수 있습니다. 이렇게하는 예제는
http://vcfaq.mvps.org/mfc/12.htm

+0

백그라운드 스레드 (완료 루틴을 사용하여 OVERLAPPED 읽기)보다 더 나은 방법이 있지만 MFC 메시지 디스패치 루프에서 제대로 작동하지 않을 수 있습니다 (메시지를 가져올 때 경고 대기를 사용해야합니다. MFC가하는 일임). 따라서 이것은 합리적인 접근법입니다. –

+0

ScottMcP-MVP 그 트릭을 해 주셔서 감사합니다. @BenVoigt 중복 된 읽기를 시도했지만 코드가 더 복잡해져 제 경우를 제공하지 않았습니다. 방금 시간 초과가있는 기본 ReadFile을 수행했습니다. –

관련 문제