如何安全结束一个线程

lubiancao12 2009-09-04 06:12:44
描述:

主线程A, 然后新起一个工作线程B,

//主线程A
main()
{
beginthreadex(NULL, FunB,...);
}

//工作线程B
UINT FunB()
{
//分配内存
。。。。

while(1)
{
//开始计算,每次需要计算5分钟
}
//释放内存

}

现在当要关闭程序的时候,如何安全的关闭B线程呢?不要有内存泄露。 不可能使用waitfor....等待的,谁也不会等5分钟再关。
...全文
414 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinona 2009-09-27
  • 打赏
  • 举报
回复
按你的要求其实要安全除了等线程5分钟结束,其他的都是不安全的,
如果不想让用户等,那就虚结束,销毁窗口,但是程序其实还在运行,
直到线程结束程序才真正退出
否则的话是没有安全性可言的
另外的做法也有,那就是对你的5分钟处理进行拆分,拆成1分钟,或者更少,
只是执行次数多了,这样你可以没执行一次就判断一次,但这样你知道也该
明白效率绝对是比以前相应减少的倍数.
hhyhw2001 2009-09-24
  • 打赏
  • 举报
回复
在流程中加判断点
lubiancao12 2009-09-24
  • 打赏
  • 举报
回复
只有16楼和28楼似乎明白我在说什么,提出的方法差不多,不太满意,多谢各位!
lubiancao12 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 gotooker 的回复:]
你的计算5分钟是有一个堵塞操作超时5分钟,还是执行完所有操作需5分钟
如果第一种可把超时时间缩短,循环操作这样可以减少响应时间。
第二种的话要在流程加入判断是否退出的点
[/Quote]

只有16楼和28楼,似乎明白我在说什么,提出的方法差不多,都不是很满意,多谢各位!
qjybch 2009-09-23
  • 打赏
  • 举报
回复
sleep 一下下。不是很懂
用29L的办法,或者用BOOL型变量也可以,本人初学者。。。。
zhushengweii 2009-09-23
  • 打赏
  • 举报
回复
一个return不就OK了吗?你还想干啥?
paerxiushi 2009-09-23
  • 打赏
  • 举报
回复
定义事件:
HANDLE hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

线程内部函数体:
while(true)
{
DWORD dwResult=WaitForSingleObject(hEvent,100);
if(dwResult==WAIT_OBJECT_0)
return TRUE;


}

主线程退出代码:
SetEvent(hEvent);
HANDLE hObject[2];
hObject[0]=hThread; //线程句柄
hObject[1]=hEvent; //事件句柄
WaitForMultipleObjects(2,hObject,TRUE,INFINITE);

zlixus 2009-09-21
  • 打赏
  • 举报
回复
退出之前先通知线程结束,等线程结束了 再正常退出程序。
周成风 2009-09-21
  • 打赏
  • 举报
回复
设置一个标志位吧。。。楼上的都说得很好。
oldn123 2009-09-21
  • 打赏
  • 举报
回复
while(true)
{
....
step1:
if(..)
{
break;
}

....
step2:
if(..)
{
break;
}

....
step3:
if(..)
{
break;
}

....
}

在你的while里多作些退出检测就行啦
Noak_ark 2009-09-17
  • 打赏
  • 举报
回复
最安全的方法就是让它自己返回了
BAKER_LEE 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 lubiancao12 的回复:]

现在当要关闭程序的时候,如何安全的关闭B线程呢?不要有内存泄露。   不可能使用waitfor....等待的,谁也不会等5分钟再关。
[/Quote]
如果不等待5分钟,而且是关闭程序,就不用管它,在程序结束的时候系统会回收程序申请的一切资源:内存,内核对象等。。。
nodiebirdcomeback 2009-09-17
  • 打赏
  • 举报
回复
让线程自己退出是最安全的。
yhwz_8888 2009-09-16
  • 打赏
  • 举报
回复
自己设置结束标志
Eleven 2009-09-16
  • 打赏
  • 举报
回复
最安全当然是return啦
bingo0717 2009-09-16
  • 打赏
  • 举报
回复
在主线程A里开个子进程,子进程开个工作线程B,要结束线程B的时候,主线程A发个消息给子进程,让子进程自己结束自己,那么线程B也自然结束了,资源也会被释放。
deryker 2009-09-16
  • 打赏
  • 举报
回复
在while循环里设个结束标志试试
zhangwenlang 2009-09-15
  • 打赏
  • 举报
回复
内部自己结束吧,挥刀自宫吧
chxy85 2009-09-15
  • 打赏
  • 举报
回复
最安全的办法是return掉
gotooker 2009-09-15
  • 打赏
  • 举报
回复
你的计算5分钟是有一个堵塞操作超时5分钟,还是执行完所有操作需5分钟
如果第一种可把超时时间缩短,循环操作这样可以减少响应时间。
第二种的话要在流程加入判断是否退出的点
加载更多回复(15)

15,471

社区成员

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

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