https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-sendmessage
SendMessage 함수(winuser.h) - Win32 apps
SendMessage 함수는 지정된 메시지를 창 또는 창으로 보냅니다. (SendMessage 함수)
learn.microsoft.com
SendMessage함수를 사용하게 되면 무한 대기 상태에 빠질 수 있다
SendMessage는 동기식으로 작동하기 때문에 윈도우로 메시지 보낸 다음에 응답을 받을 때 까지 대기한다.
HWND_BROADCAST로 윈도우 메시지를 보내면 어떤식으로 작동 하냐면,
모든 최상위 창으로 윈도우 메시지를 보내고, 응답이 올 때 까지 대기한다.
저렇게 되면 특정 윈도우 단 한개에서라도 응답을 주지 않으면, 프로그램은 무한 대기 하게 된다.
저런 경우에는 작업 관리자 - 대기 체인 분석으로 확인 가능하다.
다른 프로세스에서 응답을 못 받아 대기중이면 (프로세스이름)을 대기중입니다. 이런식으로 나온다.
아무튼 일반적으로는 모든 윈도우에서 응답받아서 정상적으로 실행되지만,
간혹 응답을 못 받는 경우가 있으니
HWND_BROADCAST 로 메시지를 보내야 할 때는 반드시
SendMessageTimeout 으로 타임아웃을 지정해 주거나
비동기식인 PostMessage 를 사용해야한다
'C++, MFC > 트러블슈팅' 카테고리의 다른 글
Process Explorer 툴 활용하여 메모리릭 체크 (1) | 2024.12.10 |
---|