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
반응형