社区
进程/线程/DLL
帖子详情
如何安全结束一个线程
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
打赏
收藏
如何安全结束一个线程
描述: 主线程A, 然后新起一个工作线程B, //主线程A main() { beginthreadex(NULL, FunB,...); } //工作线程B UINT FunB() { //分配内存 。。。。 while(1) { //开始计算,每次需要计算5分钟 } //释放内存 } 现在当要关闭程序的时候,如何安全的关闭B线程呢?不要有内存泄露。 不可能使用waitfor....等待的,谁也不会等5分钟再关。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
JAVA多
线程
精讲下
本课程是《零基础学Java》系列课程中的多
线程
相关课程.授课形式延续了之前课程的授课风格。内容细腻、详尽,由浅入深!通过本门课程的学习你可以深刻理解Java多
线程
的原理及实现运行机制,深刻学习多
线程
的生命周期、调度、控制等内容。多
线程
精讲下课程内容涵盖如下:l
线程
的同步(
线程
安全
问题)l
线程
的死锁l
线程
间通信l
线程
组l
线程
池l 多
线程
的第三种实现方案l 匿名内部类方式使用多
线程
l 定时器的使用l 多
线程
面试题
android 如何
结束
一个
线程
?
如何
结束
一个
线程
? 关于
线程
的
结束
有以下几点: 1.不要手动调用stop方法强行终止
一个
线程
,这种方式不
安全
。 通过帮助文档,我们可以知道,Android的
线程
类本身就提供了一些公共方法去
结束
线程
。 final void stop() This method is deprecated. because stopping a thread in
Java并发编程番外篇(一)如何
结束
一个
线程
本篇博客介绍下如何
结束
一个
线程
。在Java 的设计中,当
一个
线程
的run方法中代码执行
结束
后,该
线程
就自动
结束
了。但是,在我们的实际开发过程中,可能会需要手动的
结束
一个
线程
,此时我们应该怎么
安全
地
结束
一个
线程
呢?1. stop方法根据Java的官方文档,Java Thread,该方法已被弃用。文档给出的解释是,该方法不
安全
,使用stop方法
结束
一个
线程
会导致该
线程
释放所有占有的锁。如果这些锁保护的一
如何
安全
的
结束
一个
正在运行的
线程
java.lang.Thread类包含了一些常用的方法,如:start(), stop(), stop(Throwable) ,suspend(), destroy(),resume()。通过这些方法,我们可以对
线程
进行方便的操作,但是这些方法中,只有start()方法得到了保留。 简单来说是因为:使用stop方法虽然可以强行终止正在运行或挂起的
线程
,但使用stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,因此,并不推荐使用stop方法来终止
线程
。 那么.
如何停止
一个
线程
?
1 如何停止
一个
线程
? 不能简单的停止(Stop())
一个
线程
。因为停止stop()会直接把
线程
停止,这样就没有给
线程
足够的时间来处理想要在停止前保存数据的逻辑,任务戛然而止,会导致出现数据完整性等问题; 虽然
线程
不能在中间被停止/干掉,但是任务是可以停止的;想让
线程
结束
的目的是让任务
结束
,而不是强制
线程
结束
。有两种方式
结束
任务,分别是:Interrupt和boolean标志位; 使用
线程
中断机制-interrupt停止
线程
,分2种情况。如果原生支持interrupt:sleep、wait等可以让
线程
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章