유돌이

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

'ExitProcess'에 해당되는 글 2

  1. 2009.02.09 PostQuitMessage
  2. 2009.02.09 ExitProcess(), TerminateProcess(), PostQuitMessage() 차이점
2009. 2. 9. 21:38 C/C++/MFC

PostQuitMessage

원형 VOID PostQuitMessage(int nExitCode);
인수

▶nExitCode : 종료 코드. 이 값은 WM_QUIT의 wParam으로 전달되며 잘 사용되지 않으므로 보통 0으로 전달한다. 이 값은 메시지 루프 종료 후에 다시 WinMain의 리턴값으로 재사용되며 결국 프로세스의 종료 코드가 되는데 프로세스의 종료 코드도 사용되는 경우가 드물다.

리턴 리턴값이 없다.
설명

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

단, 이 함수는 메시지를 큐에 붙인 후 즉시 리턴하므로 호출 즉시 프로세스가 종료되는 것은 아니다. 즉 PostQuitMessage 호출 후 다른 처리를 계속할 수 있으며 이미 메시지 큐에 들어와 있는 모든 메시지가 처리된 후에 WM_QUIT 메시지가 읽혀져야 종료된다. 반면 ExitProcess 함수는 즉시 프로세스를 종료하기 때문에 이 함수 아래에 작성된 코드는 실행되지 않는다.

통상 이 함수는 메인 윈도우의 WM_DESTROY 메시지 처리 코드에 작성되어 메인 윈도우가 파괴되면 응용 프로그램을 종료하는 역할을 한다. 차일드 윈도우가 WM_DESTROY에서 이 메시지를 호출해서는 안된다. 그래서 DefWindowProc은 WM_DESTROY 메시지를 디폴트 처리할 때 PostQuitMessage를 호출하지 않도록 되어 있다.

참고함수 PostMessage, SendMessage
플렛폼 95이상
본문참조  

posted by 유돌이
2009. 2. 9. 21:37 C/C++/MFC

- ExitProcess() 

  1. 프로세스와 연결된 모든 DLL을 종료시키기 위해 각 DLL의 DllMain함수가 호출되며 DLL들은 스

     스로 정리작업을 한다.

  2. 모든 열려진 핸들을 닫는다.(핸들 테이블 제거)

  3. 실행중인 모든 쓰레드를 종료한다.

  4. 프로세스 커널 객체와 쓰레드 객체의 상태가 신호상태로 되며 이 신호를 기다리는 다른 프로세스 

     대기 상태를 해제할 수 있다.

  5. 프로세스의 종료코드는 STILL_ACTIVE에서 ExitProcess()인자로 지정한 값으로 변경된다.

  6. 곧바로 정리 작업에 들어가기 때문에 ExitProcess()함수의 다음 코드는 실행되지 않는다.

 

- PostQuitMessage()

   단지 메시지 맵에 WM_QUIT 메시지만 전달하는 것이기 때문에 다음 코드도 실행이 된다.

 

- TerminateProcess()

   1. 자기 자신이 아닌 다른 프로세스를 종료시킬 수 있다.

   2. 정리 작업을 하지 않기 때문에 되도록 금지되는 함수


'C/C++/MFC' 카테고리의 다른 글

인터페이스와 COM의 의미  (0) 2009.02.09
PostQuitMessage  (0) 2009.02.09
윈도우 핸들 구하는 방법  (0) 2009.02.09
트레이로 가는 애니메이션 출력하기  (0) 2009.02.09
string::find와 string::npos 란?  (0) 2009.02.09
posted by 유돌이
prev 1 next