티스토리 뷰

두 함수 모두 눈에 보여지는 결과로써는 두 함수 모두 현재 윈도우를 종료하는 것처럼 보이기 때문에 차이가 없을 수 있다고 생각할 수 있지만, 두 함수는 로직 상의 차이로 인해 적절한 상황에 맞게 구분되어 사용되어야 합니다.

 

 

 

PostQuitMessage


함수 시그니처 :

void PostQuitMessage(int nExitCode);

 

PostQuitMessage 함수는 메시지 큐에 WM_QUIT을 포스트하는 함수입니다. 메시지 큐에서 해당 메시지(WM_QUIT)를 읽으면, 메시지 루프의 조건식이 거짓으로 반환되면서 루프를 탈출하게 됩니다.

 

하지만, 종료를 위한 어떠한 처리를 하지 않고 단순히 메시지 루프만을 탈출하기 때문에 프로세스가 가지고 있는 각종 핸들을 놓아주거나(release), 파괴하는 등의 처리 작업을 수행하지 않습니다.

 

즉 메시지 루프 탈출만 수행한다고 보시면 됩니다.

 

 

 

DestroyWindow


함수 시그니처 :

BOOL DestroyWindow(HWND Hwnd);

 

DestroyWindow 함수는 인자로 받은 윈도우 핸들을 통해 윈도우를 파괴하는 함수입니다. 이 함수는 다음과 같은 순서로 동작합니다 :

  1. 파괴되는 윈도우에게 WM_DESTORY, WM_NCDESTROY 메시지를 보냅니다. 윈도우 프로시저에서 이 메시지를 받았을 때 자원을 해제하는 등의 종료 처리를 수행할 수 있습니다.
  2. 키보드 포커스를 제거합니다.
  3. 윈도우의 메뉴를 파괴합니다.
  4. 스레드의 메시지 큐를 비웁니다.
  5. 타이머를 파괴합니다.
  6. 클립보드의 소유권을 제거합니다.
  7. 파괴되는 윈도우의 자식 윈도우와 소유 윈도우들을 차례대로 파괴한 후, hWnd 윈도우를 파괴합니다.

 

즉, DestoryWindow는 정상적인 윈도우 파괴 및 종료를 수행하는 함수이므로, 일반적인 윈도우 종료의 상황에서는 DestroyWindow를 사용해야 합니다.

 

이 함수에 대한 자세한 설명은 이곳에서 살펴볼 수 있습니다.

 

 

 

레퍼런스


참고자료
soen.kr - Win32 API Reference
stackoverflow - What's the logical difference between PostQuitMessage() and DestroyWindow()?
티스토리 - 드럼치는 프로그래머

'개발 > Miscellaneous' 카테고리의 다른 글

퍼포스 로컬 서버 구축하기(Perforce local Server)  (0) 2020.04.26
리눅스마스터 2급 실기 정리  (11) 2020.04.24
memset 사용시 주의할 점  (1) 2020.03.04
YSE Sound Library  (0) 2019.11.29
시그윈(Cygwin)  (0) 2019.06.15
댓글