我的program如下: 
int m_nCurFrame;//提取的文件的当前帧 
int m_nMax;    //文件的总帧数 
BOOL bb; CXXView::CXXView 

  bb = FALSE; 
} void CXXView::OnAutoProcessing() 

  while (m_nCurFrame++ <m_nMax) 

  if(bb) 
  { 
    break; 
  } 
    .......//procesing 
  } 
} ~CXXView::CXXView 

  bb = TRUE; 
} 我调试时,总是先到析构函数然后进入OnAutoProcessing(),而我知道调用析构函数后CXXView对象已经销毁,于是该程序 
退出时出现错误不可避免!求各位给出好的解决办法!非常感谢! 

解决方案 »

  1.   

    可以把bb的位置改一下。这样:
    void CXXView::OnAutoProcessing() 

      while (!bb && m_nCurFrame++ <m_nMax) 
      { 
          .......//procesing 
      } 
      

  2.   

    你是开了个线程来运行OnAutoProcessing的吗?!
      

  3.   

    不是开了个线程来运行OnAutoProcessing,在OnAutoProcessing中
    加入
        when(::PeekMessage())
        {
            ::translatemessage();
            ::DispatchMessage();
        }
    是死循环,如何退出!谢谢!
      

  4.   

    MFC中窗体和类是分开的,窗体注销了,但类变量还是可以继续存在的,但是类析构了窗体是比类析构前注销。
    窗体的消息循环是用GetMessage,但有窗体消息WM_QUIT的时候GetMessage返回0,while循环退出。
    窗口关闭的一般过程,点那个和最小化按钮一排的关闭按钮,会最后产生个WM_CLOSE消息,处理这个消息最后用DestroyWindow发送WM_DESTROY,再处理WM_DESTROY消息最后用PostQuitMessage产生一个WM_QUIT消息,消息循环这才算结束。
      

  5.   

    海盗空间:
        您的意思是不是调用ostQuitMessage函数!
      

  6.   

    不知道你的类是不是MFC的窗口派生类,类析构前会自动销毁窗口。
    要是你自己写的窗口类,可以参考下面的代码写消息循环过程和窗口处理过程 while(GetMessage(&msg,NULL,0,0)) //当接收到WM_QUIT消息的时候GetMessage返回为假
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
    switch (uMsg)
    {
    case WM_CLOSE:
    DestroyWindow(hwnd);//产生WM_DESTROY消息
    break; case WM_DESTROY:
    PostQuitMessage(0);//发出WM_QUIT消息
    break; default:
    return DefWindowProc(hwnd,uMsg,wParam,lParam);
    } return 0;
    }
      

  7.   

    海盗空间:
        我的类是MFC的窗口派生类,调试时退出程序(点击程序窗口右上角的x),进入类析构函数于是自动销毁窗口。但是消息循环好像还在,所以总进入OnAutoProcessing,运行到该程序最后的},程序不能再往下执行,如何处理?还望指教!!!!谢谢!