MFC应用程序关闭后异常中断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC应用程序关闭后异常中断相关的知识,希望对你有一定的参考价值。

点击MFC应用程序的关闭按钮后,应用程序异常中断,进入调试状态,发现中断的这个断言处:
_AFXWIN_INLINE BOOL CWnd::IsWindowVisible() const
ASSERT(::IsWindow(m_hWnd)); return ::IsWindowVisible(m_hWnd);

查看调用堆栈,调用过程为:WindowProc-》OnWndMsg-》void CFrameWndEx::OnActivateApp(BOOL bActive, DWORD /*dwThreadID*/)-》void CFrameImpl::OnActivateApp(BOOL bActive)-》然后就到中断处了??这是什么问题?谢谢指点

从这里看不出什么什么具体问题。
应该是你在关闭中存在没有处理的窗口操作,这个可能是线程、控件没有收到或者处理关闭消息,注意在OnClose或者其它关闭处理函数中手动将这些关闭掉(你的描述只能看出,窗口已经关闭,但程序没有退出完成的时候,依然有代码进行窗口操作)
参考技术A 窗口句柄m_hWnd无效,IsWindow返回值FALSE,触发ASSERT断言。窗口关闭的处理流程可能不正确,如果窗口类是new出来的的话,最好在NcDestroy消息里面用SAFE_DELETE处理窗口类指针吧,不要在Destroy消息里面处理,在destroy的时候窗口还没有完全销毁,不能直接delete。

以上是关于MFC应用程序关闭后异常中断的主要内容,如果未能解决你的问题,请参考以下文章

如何避免关键程序被意外关闭?

通过MFC关闭一个CMD程序

PLSQL——05异常处理

是啥导致 MFC 应用程序菜单栏变灰? [关闭]

中断异常和系统调用

关闭和重新打开应用程序后,Android 画布游戏循环中断 onResume()