在程序中写了一个线程。按F5,开始程序运行现象都还正常,可到最后出现:Unhandled exception in MultiThread.exe: 0xC0000005:Access Violation。然后指向WINMAIN.CPP中的:
if (pThread->m_pMainWnd != NULL)
{
   TRACE0("Warning: Destroying non-NULL m_pMainWnd\n");
   pThread->m_pMainWnd->DestroyWindow();
}
接下来,如果将控件关联上变量,程序就再也无法运行了。
请大侠们指教,问题到底出在哪呢?

解决方案 »

  1.   

    没有。关联控件变量删除后程序就可以运行了,但最后仍然会出现Access Violation
      

  2.   

    对于一个UI线程,退出流程通常是 窗口关闭 =》 线程退出。 你的exception的位置有个TRACE0, 意思就是警告你,你的流程不对,变成了  线程退出时,线程创建的窗口仍未退出或者未清理干净, 这是很危险的。
    确保你的线程创建的窗口销毁后,才退出线程。
      

  3.   

    谢谢各位指点
    上述问题出在我在CMultiThreadDlg类中多定义了一个CDC成员变量,在程序中却没有用到。删除即可
    现在还存在一个问题,希望大侠们释疑:
    给控件关联变量后,再次出现Access Violation。指向BOOL CMultiThreadApp::InitInstance()的m_pMainWnd = &dlg;
    我将该句置为无效后,就可以关联变量了,程序运行也没有出现任何异常。
    请问这是为什么?删除“m_pMainWnd = &dlg;"会不会导致其它问题的出现?