2017-02-18 68 views
0

我有一個MFC C++程序,偶爾會在無明顯原因的錯誤退出時崩潰。我的具體查詢如下:不整潔的程序退出:MFC C++

在我的InitInstance()重載中有各種檢查,以及設置資源,如事件和信號量。當用戶請求正常退出時,會有一個OnDestroy()消息處理程序關閉所有內容,包括釋放資源等。該位工作正常。

當InitInstance()中的其中一項檢查失敗並且該函數返回值0(導致程序退出)時,會發生此問題。我的問題是這樣的:在這種情況下,OnDestroy()會自動調用來清理事件,還是需要在退出InitInstance之前自己運行它?

+0

爲什麼你不要問你的調試器?在OnDestroy()中設置一個斷點,看看會發生什麼。另外,一個進程不會崩潰*「沒有明顯的原因」*。原因顯而易見,當您設置您的調試器中斷時,引發Win32異常。不要無奈。 – IInspectable

+0

程序中超出主程序的任何線程或互斥體?他們應該在主要退出後關閉,但有一個MSVC錯誤需要手動修復。 – ark1974

+1

@ ark1974:當控制離開用戶提供的入口點(在GUI程序中稱爲「WinMain」,而不是在main中)時,無論是否執行清理,它都是無關緊要的。該進程即將退出,操作系統將收回所有資源。不確定你指的是哪個*「bug」*。 – IInspectable

回答

0

如果主窗口窗口已經存在,則應使用DestroyWindow將其銷燬。不,在使用FALSE退出​​InitInstance時不會自動銷燬。 ExitInstance被執行,但現有的窗口將在應用程序退出時關閉。

無論如何,當應用程序存在時,文件和內存等常規資源將被釋放。