如何终止线程

zhaochen666 2012-11-21 04:24:52
在mfc应用程序中,使用AfxBeginThread创建一个线程,该线程中使用gsoap实现webservice服务。
假设在webservice过程中需要耗时10秒。现在我关闭应用程序,但webservice尚未完成如何,如何强制使子线程退出,且没有内存泄露。目前使用TerminateThread函数,但存在内存泄露。因为该函数并未释放c++资源。目前我有一个想法是在子线程中使用try,catch。但如何使该线程抛出异常。
...全文
176 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
breaksoftware 2012-11-21
  • 打赏
  • 举报
回复
我验证了下,是可行的。你看http://blog.csdn.net/breaksoftware/article/details/8209502
breaksoftware 2012-11-21
  • 打赏
  • 举报
回复
顺着LZ的思路,我想你可以先挂起线程,然后获得线程执行环境,然后修改程序指针使其指向一个无效地址,然后恢复运行。是不是就好了呢?只是个初步想法,没经过验证。
傻X 2012-11-21
  • 打赏
  • 举报
回复
你应用程序关闭,相当于进程释放?操作系统帮助你回收进程所占资源(包括线程所申请的内存)。何来内存泄露之理呢?
dllg1988 2012-11-21
  • 打赏
  • 举报
回复
也碰到过同样的问题,貌似只能暴力终止线程。1L和4L都不看清楼主问的什么就回答。。 个人觉得如果就是在主线程退出的时候来考虑这个问题,应该可以不用管子线程是否还在跑,直接让主线程正常退出就是了,主线程正常退出进程结束,OS会回收这个进程所占有的所有资源,理论上是没问题的,Terminate也应该也没关系
ls443085074 2012-11-21
  • 打赏
  • 举报
回复
加退出的控制变量 例如 if(!m_bWorking) return;
xumaojun 2012-11-21
  • 打赏
  • 举报
回复
最好不要强制结束线程,还是通过变量或者信号等让线程自动退出
zhaochen666 2012-11-21
  • 打赏
  • 举报
回复
to2楼,假设子线程进入gsoap的网络服务中,timeout时间设置8秒。刚好在这时间内,我直接关闭了应用程序,总不能等子线程等待事件退出吧,这不合理。用户会认为我都关闭应用了,还要等5,6秒才退出,明显有问题。。
九州剑王 2012-11-21
  • 打赏
  • 举报
回复
线程判断个变量或者事件,等到设置了的时候,自己return

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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