|
제가 가볍게 생각할 수도 있다는것을 먼저 밝히고 이야기를 시작하겠습니다.
왜냐면 NMUDP를 사용해본적이 없기때문이죠.. ㅎㅎ
프로그램 종료시 메모리 엑세스 바이얼레이션이 자주 일어나진 않으신지 먼저 묻고싶습니다.
프로그램 종료시 UDP같은 소캣 스래드의 동작을 멈추고 제거하는 작업은 반듯이 필요합니다.
UDP가 쓰래드를 동작시키는지는 잘 모르지만 뭐 동작할거라 예상이 되네요.
또하나 가볍게 생각해보는건
프로그램이 깨끗하게 종료된다고 한다면 윈도우 종료 이벤트를 굳이 받을 필요는 없다고 보여지네요.
박종일 님이 쓰신 글 :
: 윈도우를 종료시켰을때.. 일반 프로그램들은 종료되면서 윈도우가 종료되게 됩니다.
: 이럴경우에는 자신의 프로그램에서도 윈도우의 종료메세지를 받아서 처리하게 된다고 알고 있습니다.
: 그래서 아래와 같이 종료메세지들을 찾아서 첨부해 줬는데..
: 일반적인 경우에는 정상적으로 종료가 잘 됩니다.
: 하지만 폼에 UDP를 쓰기위해서 NMUDP 컴퍼넌트를 하나 사용한 뒤에는 종료가 되지 않고 있습니다.
:
: 문제는 프로그램은 종료했습니다. 그런데 윈도우가 종료하지 않습니다.
: 그래서 다시한번 윈도우를 종료하면 되긴하는데.. 원천적으로 이문제를 해결할수 있는 방법이 없는지요.
:
: 아니면 추가적인 다른 코드가 필요할까요 ?
:
: void __fastcall WMQueryEndSession(Messages::TMessage &Msg);
: void __fastcall WMEndSession(Messages::TMessage &Msg);
: BEGIN_MESSAGE_MAP
: MESSAGE_HANDLER(WM_QUERYENDSESSION,TMessage,WMQueryEndSession);
: MESSAGE_HANDLER(WM_ENDSESSION,TMessage,WMEndSession);
: END_MESSAGE_MAP(TForm);
:
: void __fastcall Tfrm_ShutDown::WMQueryEndSession(TMessage &Msg)
: {
: Msg.Result=1; //종료 가능 ,
: //종료하지 못하게 하려면 Msg.Result=0;
: }
:
: //---------------------------------------------------------------------------
: //Windows 운영체제가 종료
: void __fastcall Tfrm_ShutDown::WMEndSession(TMessage &Msg)
: {
: if(Msg.WParam==true) {
: //Windows 운영체제 종료 시 처리할 작업 수행
: }
: Msg.Result=0;
: }
|