|
수야!╋님 글 읽어주셔서 감사합니다.
우선 프로그램 종료시에는 아무런 문제가 없습니다.
또한 UDP 의 경우에 내부적으로 쓰레드가 생성될수도 있을지 모르겠지만..
제 생각에는 싱글톤 프로세서일거 같구요.
폼 클로즈시키기전에 Free() 메소드도 사용해봤습니다.
또한 원래의 목적은 백그라운드 프로세서인데.. 그러니.. 혼자서 돌고있다가..
윈도우가 종료되면 자기도 종료하면서.. 윈도우가 정상종료하게 만들면 되는건데.
자기는 종료해도.. 윈도우의 종료가 정상적으로 되지않는다는게 문제라서요.
수야!╋ 님이 쓰신 글 :
: 제가 가볍게 생각할 수도 있다는것을 먼저 밝히고 이야기를 시작하겠습니다.
: 왜냐면 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;
: : }
|