'winapi'에 해당되는 글 1건

320x100

[WINAPI] SendMessage (동기) 와 PostMessage (비동기)의 차이점

Posted on 2009. 4. 28. 18:40
Filed Under Visual C++


SendMessage 와 PostMessage 의는 차이점이 있습니다.
둘다 해당 윈도우로 메시지를 보내는 기능을 가지지만 내부 동작이 다릅니다.
PostMessage의 경우 해당 윈도우 메시지 큐에 메시지를 붙이고 바로 리턴을 하므로 동작이 비동기 적 입니다.
즉 PostMessage를 호출한다 하여도 해당 윈도우가 다른 메시지를 처리하느라 바쁘다면 약간 처리가 늦어 지게 됩니다.
따라서 미쳐 문자열 포인터에 접근하기전에 이쪽에서 먼저 메모리를 해제해 버리면 문자열이 날아가 버리겠죠..

반면 SendMessage는 큐에 붙이는것이 아니라 메시지 프로시져를 직접 실행
하게 됩니다. 즉 동기적 이죠 SendMessage를 호출하는순간 바로 해당 윈도우의 프로시져를 직접 실행하게 되므로 SendMessage를 호출한 순간에 바로 실행이 되고 리턴이 되어야 현재 호출한 곳으로 제어가 돌아옵니다.

따라서 스택에 할당된 문자열을 포인터로 넘겨도 메모리는 해제가 되지 않습니다.
SendMessage를 호출하는 동안은 제어가 돌아오지 않으므로 당연히 해제도되지 않게 되지요.

굳이 불안하시다면 WS_COPYDATA 메시지에 실어서 보내는 방법도 있으니 찾아 보시면 알수 있을듯 합니다.
<출처: 네이버 지식IN>

반응형

About

by 쑤기c

반응형