삽질의 현장/- 윈도우 API

#011_WIndow_API_SendMessage와 PostMessage

shovelman 2015. 9. 15. 16:46


안녕하세요 삽잡이입니다.

이번 시간에는 메시지를 날리는 즉, 통신을 위한 Message 함수들에 대해서 알아보려고 합니다.


정확하게 말씀드리자면, 메시지를 발생시키는 

SendMessage와 PostMessage에 대해서 알아보려고 합니다.


우선 SendMessage함수와 PostMessage 함수는 어떻게 생겨먹었는지 살펴보도록 하겠습니다.

도와줘 MSDN~



짜잔... 이렇게 생겨먹었습니다. 그렇다면, PostMessage에 대해서 살펴보도록 하지요...



비슷하게 생긴 듯하며 약간은 다른... 이 두 함수...

결과적으로 말하면 똑같이 메시지를 날리는 기능을 가지고 있습니다.

핸들은 기본적으로 첫번째 매개변수에 들어가고요...

다음으로는 발생시키고자 하는 메시지, 

메시지에 대한 부가정보들이 순차적으로 각각 매개변수에 들어가게 됩니다.


그렇다면 어떤 차이를 가지고 있을까요?

SendMessage는 다이렉트로 메시지가 전달되고,

PostMessage는 메시지 큐를 경유하여 메시지가 전달 됩니다.


즉, SendMessage 함수는 윈도우 프로시저를 직접 호출 하게 되고,

PostMessage는 메시지 큐에 들어가 메시지 처리를 기다리게 된다는 것입니다.


SendMessage의 경우 무조건 메시지 호출이 보장됩니다.

하지만, PostMessage 함수의 경우는 메시지 호출에 대한 보장이 상대적으로 적습니다.

메시지 큐에 메시지들이 없으면

PostMessage 함수로 부터 발생된 메시지가 바로 처리 되겠지만.... 아무튼... 변수가 많다 이것입니다.

즉, SendMessage 함수는 바로 메시지를 처리하기 때문에 리턴이 보장되지만

PostMessage는 아닐 수도 있다 이거죠...


따라서 모든 부모와 자식 프로세스 간에는 SendMessage를 통해 통신하게 됩니다.


지금까지 간략하게

SendMessage와 PostMessage에 대해서 알아봤습니다.


이상 삽잡이였습니다!