본문 바로가기

Programming/API

SendMessage vs. PostMessage

Postmessage 의 경우 윈도우의 메시지 큐에 메시지가 들어가게 되고, 윈도우 프로스저에게 이 메시지를 처리하도록한다. 메시지를 큐에 넣기만 하고 바로 리턴하므로 메시지를 붙인 후 즉시 다른 작업을 할 수 있게 되지만 큐에 대기하고 있는 다른 메시지가 있으면 뒤에 붙은 메시지는 곧바로 처리되지 않는 특징을 가지고 있다. 큐에 붙여진 메시지는 GetMessage 에 의해 읽혀지고, DispatchMessage 함수에 의해 윈도우 프로시저로 보내어져 처리가 된다.

SendMessage 는 메시지를 큐에 넣는 것이 아니라 곧바로 윈도우 프로시저로 보내 즉각 처리하도록 하며 메시지가 완전히 처리되기 전에는 리턴하지 않고, 블록시켜서 대기 상태로 만든다.

말하자면, SendMessage는 메시지를 바로 처리, PostMessage는 메시지 대기 큐에 넣어서 처리를 하는것이다.

SendMessage 함수의 경우, 윈도우 프로시저가 작업을 끝내게 되면 반환 하도록 되어있는데, 이것은 작성하고자 하는 managed code 상에서 예상치 않은 익셉션이 발생한다면 실행은 SendMessage 함수 호출을 통해 리턴할 수 없게 되어, 시스템이 죽어버리는 상태를 유발하게 된다. 이러한 무제점을 해결하기 위한 함수가 SendNotifyMessage 가 있다.

'Programming > API' 카테고리의 다른 글

timeGetTime & GetTickCount  (0) 2009.11.20
GetMessage vs. PeekMessage  (0) 2009.11.06
프레임 출력  (0) 2009.11.06
기본 세팅 파일  (0) 2009.11.06