명백히 이유없이 오류 종료시 때때로 충돌하는 MFC C++ 프로그램이 있습니다. 내 구체적인 쿼리는 다음과 같습니다 :Untidy 프로그램 종료 : MFC C++
내 InitInstance()의 오버로드에는 이벤트 및 세마포와 같은 리소스를 설정할뿐 아니라 다양한 검사가 있습니다. 사용자가 정상적인 종료를 요청하면 리소스를 해제하는 것을 포함하여 모든 것을 닫는 OnDestroy() 메시지 핸들러가 있습니다.이 비트는 정상적으로 작동합니다.
이 문제는 InitInstance()의 검사 중 하나가 실패하고 함수가 값 0 (프로그램 종료 원인)을 반환 할 때 발생합니다. 내 질문은 이것입니다 : 그 사건에서 OnDestroy()는 자동으로 물건을 정리하기 위해 호출합니까, 아니면 InitInstance를 종료하기 전에 직접 실행해야합니까?
왜 디버거에 묻지 않습니까? 'OnDestroy()'에 중단 점을 설정하고 무슨 일이 일어나는 지보십시오. 또한 프로세스가 "명백한 이유없이"* 충돌하지 않습니다. 이유는 Win32 예외가 발생할 때 중단되도록 디버거를 설정할 때 분명 해집니다. 무기력하지 마십시오. – IInspectable
메인 프로그램을 초과하는 스레드 또는 뮤텍스가 있습니까? 주된 종료 후 닫히기로되어 있지만 수동으로 수정해야하는 MSVC 버그가 있습니다. – ark1974
@ ark1974 : 컨트롤이 사용자 제공 엔트리 포인트 (GUI 프로그램에서'main'이 아니라'WinMain '이라고 부름)를 떠날 때, 그것은 정리가 수행되는지 여부와 상관없이 대부분 부적합합니다. 프로세스가 곧 종료되고 OS가 모든 리소스를 다시 확보합니다. 어떤 * "버그"*를 말하는지 확실하지 않습니다. – IInspectable