*SendMessage
usage : SendMessage(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam);
해당 메시지를 메시지 큐가 아닌 해당 프로시저에 바로 던져서 처리하도록 한다.
보낸 메시지를 정확하게 처리할 수 있다.
다만 해당 메시지가 정확하게 처리될 때꺼정 block상태다. 그리고.. 메시지 큐를 무시하고 바로 프로시저에 메시지를 던져주게 되므로... 남용하면 좋지않다. -_-a...
자칫하면 프로그램이 죽을 수 있다는 치명적인 단점이 존재한다.
특히.. 스레드->스레드로 SendMessage는... 할말이 없다...
*PostMessage
usage : PostMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
메시지를 메시지 큐에 집어넣고 나는 다른일을 한다.
메시지를 던져넣고 바로 다른 작업이 가능하다. 메시지 큐에 따라서 처리되므로 사실상 좋은 처리방법이다. 다만... 단점이라면.. 메시지 큐에 들어가 있어서... 내가 포스트로 날리고 나서.. 해당 메시지가 언제 처리될 지 알 수 없다.. 특히 파라미터로 로컬 포인터를 사용하면 참사가 날수도 있다.-_-a
그리고 리턴값을 꼭 확인할 것
*SendMessageTimeout
usage : SendMessageTimeout(HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam, UINT fuFlag,
UINT timeout, DWORD_PTR dwResult);
SendMessage를 하면 Block이 된다.. 이걸 막기 위해서 사용함.. SendMessage와 기본적으로 동일하지만 timeout값을 주고 FLAG값을 설정한다. Result는 SendMessage에 대한 결과를 받아오기용
FLAG는
SMTO_NORMAL : 기다리는 동안 다른 프로세스의 요청으로부터 막히지 않음
SMTO_BLOCK : 다른 프로세스가 쓰지 않도록 블럭하며 기다림
SMTO_ABORTIFHUNG : 메시지를 받는 스레드가 멈추어있는 것 같으면 바로 리턴
SMTO_NOTIMEOUTIFHUNG : 받는 스레드가 살아있다면 타임아웃이 지나도 기다린다.
리턴값은.. 0이면 에러고 0이 아니면 success임
usage : SendMessage(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam);
해당 메시지를 메시지 큐가 아닌 해당 프로시저에 바로 던져서 처리하도록 한다.
보낸 메시지를 정확하게 처리할 수 있다.
다만 해당 메시지가 정확하게 처리될 때꺼정 block상태다. 그리고.. 메시지 큐를 무시하고 바로 프로시저에 메시지를 던져주게 되므로... 남용하면 좋지않다. -_-a...
자칫하면 프로그램이 죽을 수 있다는 치명적인 단점이 존재한다.
특히.. 스레드->스레드로 SendMessage는... 할말이 없다...
*PostMessage
usage : PostMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
메시지를 메시지 큐에 집어넣고 나는 다른일을 한다.
메시지를 던져넣고 바로 다른 작업이 가능하다. 메시지 큐에 따라서 처리되므로 사실상 좋은 처리방법이다. 다만... 단점이라면.. 메시지 큐에 들어가 있어서... 내가 포스트로 날리고 나서.. 해당 메시지가 언제 처리될 지 알 수 없다.. 특히 파라미터로 로컬 포인터를 사용하면 참사가 날수도 있다.-_-a
그리고 리턴값을 꼭 확인할 것
*SendMessageTimeout
usage : SendMessageTimeout(HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam, UINT fuFlag,
UINT timeout, DWORD_PTR dwResult);
SendMessage를 하면 Block이 된다.. 이걸 막기 위해서 사용함.. SendMessage와 기본적으로 동일하지만 timeout값을 주고 FLAG값을 설정한다. Result는 SendMessage에 대한 결과를 받아오기용
FLAG는
SMTO_NORMAL : 기다리는 동안 다른 프로세스의 요청으로부터 막히지 않음
SMTO_BLOCK : 다른 프로세스가 쓰지 않도록 블럭하며 기다림
SMTO_ABORTIFHUNG : 메시지를 받는 스레드가 멈추어있는 것 같으면 바로 리턴
SMTO_NOTIMEOUTIFHUNG : 받는 스레드가 살아있다면 타임아웃이 지나도 기다린다.
리턴값은.. 0이면 에러고 0이 아니면 success임
반응형
댓글