求教高手:MFC多线程编程中内存溢出问题

victoryluyu 2009-06-22 09:29:49
我在MFC已有的主界面线程下用AfxBeginThread创建了一个后台运行的工作线程:Threadproc

这个Threadproc函数是一个无限循环的函数(在程序整个运行过程中不能停下来),因此自己并不能返回清除关闭。

因此,每次当我关闭主线程(界面线程)的时候,调试输出窗口就会有这样的信息:Detected memory leaks!说明我没有正常释放那个Threadproc工作线程的资源。

请问高手:如何能够在我关闭主界面线程的同时,正常释放清除那个循环的工作线程(Threadproc)的资源?

十分着急,请不吝赐教,万分感谢!
...全文
130 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
duguwuming0 2009-06-23
  • 打赏
  • 举报
回复
定义一个全局变量 bFlag,在线程循环体里面开始的时候进行一次判断,当bFlag为真的时候继续运行,否则退出循环体并结束线程
然后,在主界面析构函数里面使bFlag = false并WaitForSingleObject(handle, dwTime)来等待线程结束
bylea 2009-06-23
  • 打赏
  • 举报
回复
楼上方法挺好,简单实用.
满衣兄 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 victoryluyu 的回复:]
我是新手,可不可以给出一个简单明了的代码。非常感谢!
[/Quote]
声明一个变量:
bool m_IsLoop;

开启线程的时候:

m_IsLoop = true;

循环的时候:
while(m_IsLoop)
{
//...
}

结束程序的时候:
m_IsLoop=false;
victoryluyu 2009-06-23
  • 打赏
  • 举报
回复
我是新手,可不可以给出一个简单明了的代码。非常感谢!
csgdseed 2009-06-23
  • 打赏
  • 举报
回复
线程中判断,自行退出好
cnzdgs 2009-06-22
  • 打赏
  • 举报
回复
把死循环改成判断一个bool类型的变量,主线程退出前修改该变量的值,等待线程退出后自己再退出。线程退出前释放自己占用的资源。
满衣兄 2009-06-22
  • 打赏
  • 举报
回复
这样的程序不好,自己加个开关,程序退出的时候将开关设置为false,这样使线程自然结束,保证程序健壮性.如果强制结束线程,有可能导致内存泄露.
victoryluyu 2009-06-22
  • 打赏
  • 举报
回复
我用TerminateThread这个方法,编译可以通过,但是执行时候总是报错,而且我看网上说 TerminateThread 这个方法不是很好。

信号量是怎么回事,能给个简单的代码吗?谢谢!

if(m_pWinThread!=NULL)
{
if(m_pWinThread->m_hThread!=NULL){
DWORD dwExitCode=0;
GetExitCodeThread(m_pWinThread->m_hThread,&dwExitCode);
if(dwExitCode==STILL_ACTIVE){
TerminateThread(m_pWinThread->m_hThread,0);
}
delete m_pWinThread;
}
}
真相重于对错 2009-06-22
  • 打赏
  • 举报
回复
信号量
或者
TerminateThread

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧