프로그래밍

 3198, 1/160 회원가입  로그인  
   Z2ong2
   [WIN32API]WM_DESTROY메시지때

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3239 [복사]


X버튼을 누르면 WM_DESTROY가 메시지가 발생된다는데

왜 이때 PostQuitMessage(0)으로 종료하는거죠 메시지 루프를 멈춘다는데 그럴필요가 잇을까요?

그냥 DestroyWindow()함수로도 되지 않나요?

  Hit : 4000     Date : 2011/12/13 03:54



    
$Zero 스레드 메시지 큐에 WM_QUIT 메시지를 붙이고 즉시 리턴한다. WM_QUIT 메시지를 큐에 붙임으로써 시스템에게 이 스레드가 종료될 것이라는 것을 미리 알려준다. 메시지 루프는 보통 WM_QUIT 메시지를 받으면 종료하도록 되어 있으므로 이 함수를 호출하면 메시지 루프가 종료된다. 특히 이 함수를 호출하는 스레드가 주 스레드일 경우는 주 스레드의 메시지 루프가 종료됨으로써 프로세스가 종료된다.

단, 이 함수는 메시지를 큐에 붙인 후 즉시 리턴하므로 호출 즉시 프로세스가 종료되는 것은 아니다. 즉 PostQuitMessage 호출 후 다른 처리를 계속할 수 있으며 이미 메시지 큐에 들어와 있는 모든 메시지가 처리된 후에 WM_QUIT 메시지가 읽혀져야 종료된다. 반면 ExitProcess 함수는 즉시 프로세스를 종료하기 때문에 이 함수 아래에 작성된 코드는 실행되지 않는다.
2011/12/13  
$Zero PostQuitMessage 함수의 레퍼런스 입니다.
레퍼런스만 읽어도 이유를 알 수 있군요 .
메세지 큐에 종료메시지 이전 메시지들이 아직 대기중일 수도 있으니 함부로 윈도우를 Destroy시키면 안되겠죠 ? 모든 내용을 처리하지 못하고 종료될지도 모르니까요 .
2011/12/13  
Z2ong2 흠 그러면 PostQuitMessage는 정리까지 다 해주고 종료이고,
DestroyWindow는 즉시 윈도우만 종료이고,
ExitProcess는 즉시 프로세스자체를 종료하는거겟네여
2011/12/13  
$Zero 그렇지요 ~ 2011/12/15  
Z2ong2 아 감사합니다 ㅎㅎ 2011/12/15