class CMyDlg :public CDialog
{
   BOOL m_bServerRun;
private:
  int work2();
  static void work(LPVOID param);
}
CMyDlg::CMyDlg()
{
   m_bServerRun=TRUE;
}
BOOL CMyDlg::OnInitDialog()
{
  _beginthread(work,0,(void*)this);
}
int CMyDlg::work(LPVOID param)
{
  CMyDlg* pDlg=(CMyDlg*)param;
  pDlg->work2();
}
int CMyDlg::work2()
{
  while(m_bServerRun){...}
}
上面是我的程序主对话框类的示意代码,基本结构如此,我在关闭对话框的时候,无论使用什么方法总是不能更改m_bServerRun的值,我断点调试了一下,发现在关闭对话框以后m_bServerRun变成了一个随机的值,感觉好像是关闭对话框以后应用程序中的对话框变量自动销毁了,所占用的内存也被释放掉,所以导致m_bServerRun变成随机值,导致work线程无法即时退出。各位高手有什么解决办法么?

解决方案 »

  1.   

    static void work(LPVOID param);int CMyDlg::work(LPVOID param)
    {
      CMyDlg* pDlg=(CMyDlg*)param;
      pDlg->work2();
    }好像这两函数都不是同一个?
      

  2.   

    用全局变量来代替m_bServerRun应该就可以了啊!
    或者采取些同步措施!在对话框销毁前结束子线程!
      

  3.   

    use a global variable instead..
      

  4.   

    use a global variable instead but must be static !
      

  5.   

    在EndDialog()之前调用TerminateThread()如何?
      

  6.   

    在对话框退出前,调用TerminateThread。
    或把m_bServerRun设为全局变量,对话框退出前置为FALSE。
      

  7.   

    把m_bServerRun设置为全局变量
      

  8.   

    全局争取不用TerminateThread。
    用事件通知...