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应用程序关闭后异常中断的主要内容,如果未能解决你的问题,请参考以下文章