관리 메뉴

History

[MFC] SendMessage와 PostMessage의 각 특징 본문

MFC/개념 정리

[MFC] SendMessage와 PostMessage의 각 특징

luckybee 2023. 2. 1. 15:50
728x90
반응형

SendMessage

BOOL SendMessage(
  [in, optional] HWND   hWnd,            // 메시지를 받을 윈도우 핸들
  [in]           UINT   Msg,             // 전달할 메시지
  [in]           WPARAM wParam,          
  [in]           LPARAM lParam
);

-동작 순서

 

- 메시지를 메시지 큐에 넣는 것이 아니라 곧바로 윈도우 프로시저(WinProc)로 보내 즉각 처리하도록 한다.

- 메시지가 완전이 처리되기 전에 리턴하지 않는다.(블록 시킨다.)

 

-장점

 

- 보낸 메시지의 정확한 처리

 

-단점

 

- 보낸 메시지가 완전히 처리될 때까지 기다리므로, 메시지를 보낸 쪽은 블록 상태에 머물게 된다.

- 잘못하면 프로그램이 계속 멈춰있는 상태로 머물 수 있다.

*멀티 스레드 사용할 시 SendMessage는 사용에 위험이 있다.

 

-활용

- 부모 윈도우와 자식 컨트롤 간의 통신

- 윈도우간 정확한 데이터 전송 및 처리를 위한 통신

- 윈도우의 특정 메시지는 SendMessage만을 사용해야 하는 경우가 있다.(WM_COPYDATA)

 

PostMessage

BOOL PostMessageW(
  [in, optional] HWND   hWnd,            // 메시지를 받을 윈도우 핸들
  [in]           UINT   Msg,             // 전달할 메시지
  [in]           WPARAM wParam,          
  [in]           LPARAM lParam
);

-동작 순서

 

1. PostMessage는 Msg 인수로 지정된 메시지를 hWnd 윈도우의 메시지 큐에 넣는다.

2. 메시지를 받은 윈도우는 윈도우 프로시저(WinProc)에서 이 메시지를 처리한다.

3. 메시지를 메시지 큐에 넣고 바로 리턴한다.

 

-리턴 값

 

- 함수가 성공하면 반환 값이 0이 아니다.

 

-장점

 

- 메시지를 메시지 큐에 넣기만 하고 바로 리턴하기 때문에 "블록(block)" 시키지 않는다. 따라서 바로 다른 적업을 할 수 있다.

 

-단점

 

- 메시지를 메시지 큐에 넣고 리턴하기 때문에 큐에 대기하고 있던 다른 메시지가 있으면 해당 메시지가 바로 처리되지 않을 수 도 있다.

 

-활용

 

- 급하게 처리할 필요가 없는 메시지- 지금 하고 있는 작업을 완전히 끝내야만 처리할 수 있는 메시지

 

728x90
반응형
Comments