|
시스템이 종료될 때 모든 프로그램들이 종료가 되져.
그런데 무조건 프로그램(더 엄격히 말해서 프로세스들)들을 무조건 종료(WM_CLOSE)시키는 것이 아니라
"이제 컴퓨터 끌려고 하니까 종료하려고 하는데 너희들은 괜찮니?" 라고 모든 프로세스들에게 물어 봅니다.
그중 하나의 프로세스라도 "나는 안돼!" 라고 하면 시스템 종료는 되지 않습니다.
일반적인 editor를 띄운 상태에서 시스켐 종료시 저장할 거냐고 물어 봤을 때 Cancel을 누르면
시스템이 종료가 되지 않는 원인이 여기에 있습니다.
다음은 대충 제가 써 버는 종료시 수행되는 OS상의 pseudo C Code입니다.
{
bool bCanCloseSystem = true;
for (i = 0; i < nProcessCount; i++) {
bool nCanCloseProcess = SendMessage(PID(i), WM_QUERYENDSESSION, ...);
if (!nCanCloseProcess) {
bCanCloseSystem = false;
break;
}
}
if (bCanClose System)
for (i = 0; i < nProcessCount; i++)
SendMessage(PID(i), WM_CLOSE, ...);
}
해결방법은 WM_QUERYENDSSION MESSAGE가 왔을 때 true를 return해 주면 됩니다.
^^: 님이 쓰신 글 :
: 안녕하십니까?
: 많은 분들이 msn을 사용하시져?
: 저두 이런 msn은 아니지만 C/S 프로그램을 하나 하구 있는 빌더 초보자입니다.
: 서버측에서 메세지를 던지면 그 이벤트에 메세지가 왔습니다. 라는 팝업을 띄우고 싶은데여..
: 다른 것들은 그럭저럭 해결되었고 트레이에도 잘올라가고 합니다.
: 근데 msn처럼 프로그램 종료 버튼을 눌렀을 때 프로그램이 죽는것이 아니구 tray 아이콘을 이용해 폼을 숨기기 위하여 FormCloseQuery함수를 정의 구현하면서 argument인 Canclose를 false로 하도록 하고 숨기도록 하였더니 여기까지는 아주 잘 먹혀들어갔습니다.
: 근데 문제가 생겼는데여... 제가 만든 프로그램을 종료시키지 않구여... tasktray에 아이콘을 올라있는 상태에서 시스템 종료를 실행시키니까 근데 제가 만든 프로그램이 죽지를 않아여..
:
: 곰곰히 생각하니 시스템 종료 시 발생하는 이벤트가 FormCloseQuery를 호출하고 FormClose로 가는 것 같거든여...FormCloseQuery를 바로 호출하는 이상은 얘는 tasktray에 아이콘을 올리는 것만 수행을 할테니 프로그램이 종료하지 못하는게 아닌가 하는 생각에 이르렀습니다.
:
: 시스템 종료시 이 프로그램에 발생하는 프로그램 종료와 관련된 이벤트와 직접 프로그램 종료 버튼을 눌렀을 때 발생하는 이벤트에 차이가 없나여?
: 이 둘을 어떻게 구분할 수 있게 구분하여 프로그램 할 수 있느지 알려주심 감사하겠습니다.
:
|