基于对话框应用程序的多线程有关问题,望高手指教
基于对话框应用程序的多线程问题,望高手指教。
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。
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。