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线程无法即时退出。各位高手有什么解决办法么?
{
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线程无法即时退出。各位高手有什么解决办法么?
解决方案 »
- 远程调用DCOM:大家帮我看看,为什么我的代码 FindConnectionPoint 总是失败。
- WAV 中 waveOutUnprepareHeader调用的时机问题(需要的可以提供全部源码)
- 结构体问题
- 高手捡分了,关于CMSFlexGrid
- 一个XML文档的内容能复制到另一个XML文档中去吗,不能的话,怎么解决?
- WTL没有文档怎么用啊!网上找了一圈没有发现,那位仁兄知道啊?
- 在浏览器中双击文件,有时无法打开文件。
- 程序在我的电脑上可以运行,但在同学的电脑上运行显示ntdll.dll出错,是什么原因啦,请大侠指点
- 属性页的标题如何设置上下两行显示
- visual C++ ??? Delphi??? 我憋的难受!
- 用C#编写C/S结构的软件是不是一定要客户端有.NET啊可能到我老了的那一天也不可能.NET全部机器上有
- 用win2000简体中文版怎样测试写的繁体软件中的编码是否会出现乱码?
{
CMyDlg* pDlg=(CMyDlg*)param;
pDlg->work2();
}好像这两函数都不是同一个?
或者采取些同步措施!在对话框销毁前结束子线程!
或把m_bServerRun设为全局变量,对话框退出前置为FALSE。
用事件通知...