基于对话框应用程序的多线程有关问题,望高手指教

基于对话框应用程序的多线程问题,望高手指教。
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线程无法即时退出。

各位高手有什么解决办法么?

------解决方案--------------------
static void work(LPVOID param);

int CMyDlg::work(LPVOID param)
{
CMyDlg* pDlg=(CMyDlg*)param;
pDlg-> work2();
}

好像这两函数都不是同一个?
------解决方案--------------------
还有把你修改那个值的代码也粘上来吧
------解决方案--------------------
用全局变量来代替m_bServerRun应该就可以了啊!
或者采取些同步措施!在对话框销毁前结束子线程!


------解决方案--------------------
use a global variable instead..
------解决方案--------------------
楼上正解
------解决方案--------------------
use a global variable instead but must be static !

------解决方案--------------------
在EndDialog()之前调用TerminateThread()如何?
------解决方案--------------------
晚了被说完了
------解决方案--------------------
设为全局变量
------解决方案--------------------
在对话框退出前,调用TerminateThread。
或把m_bServerRun设为全局变量,对话框退出前置为FALSE。