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线程无法即时退出。各位高手有什么解决办法么?
解决方案 »
- 弄不懂GetApp,GetActiveWindow,GetDlgItem之类的
- 语音聊天代码 求高手帮忙修改下 加上一个关闭的函数 急!!!
- Detected memory leaks!
- 有关键盘的问题
- 如何用wtl操作list控件,如何把list控件定义成成员变量,不用mfc。
- 求线段数组里相交直线算法
- 高分求救,小弟我才疏学浅,实在写不出这种算法,请大侠指点迷津。
- ScrollWindow()有什么用?
- listview中添加背景图的问题
- 为什么窗体透明后,就不能移动操作了?
- 用C#编写C/S结构的软件是不是一定要客户端有.NET啊可能到我老了的那一天也不可能.NET全部机器上有
- 用win2000简体中文版怎样测试写的繁体软件中的编码是否会出现乱码?
{
CMyDlg* pDlg=(CMyDlg*)param;
pDlg->work2();
}好像这两函数都不是同一个?
或者采取些同步措施!在对话框销毁前结束子线程!
或把m_bServerRun设为全局变量,对话框退出前置为FALSE。
用事件通知...