나는 작업중인 다중 대화 상자 MFC 클라이언트 응용 프로그램이 있습니다. 이 클라이언트는 종종 작은 기능을 수행하는 주 대화 상자에 많은 메시징 (> 10Hz)을 수신 한 다음 처리를 위해 해당 메시지를 다른 대화 상자에 전달합니다.
나의 특별한 경우에, 주 대화 상자는 차량 위치와 관련된 메시지를 받고, 그 GUI에있는 몇 개의 필드를 업데이트 한 다음, PostMessage를 통해 모든 차량 정보를 표시하는 창으로 전달합니다.WindProc이 나를 위해 무엇을합니까?
기본적으로, 내 질문은 이것입니다 : 메시지를 게시하거나, 그냥 dialog.update (내가 만든 함수)를 호출하는 차이점은 무엇입니까?
예 프로그램이 멀티 스레드입니다. 두 번째 windproc이 dialog.update()와 동일한 함수를 호출한다고 가정 해 보겠습니다. 게시물 메시지가 메시지를 보내고 업데이트가 완료 될 때까지 기다리지 않겠다고 말했지만, dialog.update()를 수행하면 업데이트가 완료 될 때까지 코드가 계속 실행되지 않습니다. 그럴까요? – Jason
네, 기본적으로. PostMessge가 수행하는 작업은 모두 해당 창을 소유 한 스레드의 메시지 큐에 메시지를 넣은 다음 반환합니다. 창을 소유 한 스레드는 게시 한 메시지에 도달 할 때까지 메시지를 펌핑해야합니다. 그러나 SendMessage 할 경우 메시지는 즉시 창 WndProc로 이동하고 메시지가 처리 될 때까지 반환되지 않습니다. –
그래서 3 가지 옵션 : 1) 메시지 게시, 2) 메시지 보내기, 3) Dialog.update(), 이것은 내가 가지고있는 것입니다 : 1) 즉시 게시하고 돌아갑니다. 메시지의 수신자가 메시지 처리를 위해 돌아갑니다. 2) 즉시 게시되지만 수신자가 완료되기 전에 완료 될 때까지 기다립니다. 3) 아니오와 동일. 2. 나는 그 권리를 읽고 있니? – Jason