본문 바로가기
C & C++/MFC Network

[SendMessageCallback] 메시지(Message) 처리

by izen8 2013. 11. 14.
반응형

 

 

SendMultipleMsg.zip
다운로드

 

TestDlg1.zip
다운로드

 

TestDlg2.zip
다운로드

 

 

윈도에 메시지를 보낼때 보통 PostMessage 또는 SendMessage를 사용합니다. 다 아는 얘기지만 PostMessage는 메시지를 보내고 그 결과를 기다리지 않는 비동기적 성격을 갖고 있으며 SendMessage는 메시지를 보내고 결과가 올때까지 기다리는 동기적 성격을 갖고 있습니다.

 

따라서 PostMessage는 결과에 상관없이 즉시 리턴하기 때문에 다음 명령을 바로 실행 할 수 있는 장점이 있는 반면 처리 결과를 알기가 불편하고 SendMessage는 메시지 처리결과를 알 수 있지만 처리하는 동안 기다려야 하는 불편함이 있습니다.

 

그렇다면 여러개의 윈도에 동시에 메시지를 보내놓고 먼저 처리대는 대로 그 결과를 받고 싶은 경우는 어떻게 해야 할까요?

 

이경우 PostMessage와 SendMessage의 장점만 골라서 필요한 경우라고 할 수 있는데요. 이때 사용할 만한 API가 SendMessageCallback입니다. 비동기적으로 동작하고 그 결과는 Callback함수로 받을 수 있죠...

아래 SendMessageCallback을 사용하는 동영상을 보면 이해할 수 있습니다.

 

TestDlg1은 메시지를 받으면 10초간 대기하고 결과를 리턴하며, TestDlg2는 5초간 대기하고 결과를 리턴하는 프로그램입니다. 테스트를 시작하는 프로그램은 TestDlg1, TestDlg2에 순서대로 메시지를 보냅니다.

 

만일 SendMessage를 사용한다면 총 15초(TestDlg1의 10초 + TestDlg2의 5초)를 기다려야 모든 일이 끝나지만 SendMessageCallback을 사용하는 경우는 TestDlg1의 10초만 기다리면 됩니다. 10초안에 TestDlg2의 결과를 리턴받을 테니까요...

반응형

댓글