반응형

MFC에서 각 윈도우 핸들간 메시지를  전달하는 방법으로 SendMessage와 PostMessage가 있다.

이 둘은 비슷하면서도 차이가 있다.

가장 많이 쓰는 곳이 쓰레드에서 UI 접근할때가 아닌가 싶다.

 

이 둘의 차이점을 가장 쉽게 표현하자면 비동기화와 동기화 차이라고 할 수 있다.

SendMessage

함수 원형

LRESULT SendMessage(
  HWND   hWnd,
  UINT   Msg,
  WPARAM wParam,
  LPARAM lParam
);

동작

SendMessage를 호출하게 되면 해당 윈도우의 메시지프로시져가 즉각 호출되어 해당 메시지의 처리가 끝날때까지 리턴하지 않는다.

즉, 동기화가 된다.

 

활용

해당 메시지 처리 작업이 길지 않은 곳에 사용하면 될것 같다. 간단한 UI 업데이트 등..

 

PostMessage

함수 원형

BOOL PostMessage(
  HWND   hWnd,
  UINT   Msg,
  WPARAM wParam,
  LPARAM lParam
);

동작

PostMessage를 호출하게 되면 해당 윈도우의 메시지 큐에 추가된다.

메시지 큐(Queue)에 호출 메시지만 삽입하고 바로 블럭을 빠져나온다.(즉시 리턴)

이는 곧, 메시지 처리 결과와 상관없이 다음 코드를 진입한다는 뜻이다. (비동기)

 

활용

메시지 처리작업이 오래걸리거나 처리결과가 중요하지 않는 경우에 사용될거 같다.

+ Recent posts