社区
进程/线程/DLL
帖子详情
大家来讨论一下,关于子线程和主线程的终止运行的先后顺序!
SuperKick
2006-06-15 02:53:03
说明:子线程是在主线程中创建的,并由主线程控制是否终止运行。
现在要讨论的问题是:主线程是否一定要等所有子线程都终止了自己才能终止运行?
...全文
1105
27
打赏
收藏
大家来讨论一下,关于子线程和主线程的终止运行的先后顺序!
说明:子线程是在主线程中创建的,并由主线程控制是否终止运行。 现在要讨论的问题是:主线程是否一定要等所有子线程都终止了自己才能终止运行?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
SuperKick
2006-06-19
打赏
举报
回复
其实就是加了这一句
WaitForSingleObject( hThreadExitEvt, 2000 );
SuperKick
2006-06-19
打赏
举报
回复
听取了大家的建议后,我把程序改了一下,现在是这样做的:
(1)子线程里主要是运算,没有类似Socket中Read之类的阻塞动作。
(2)为了保证等子线程都退出了主程序再退出,我加了个叫hThreadExitEvt的Event句柄来控制。
目前这样好像没有出什么问题。
covsno
2006-06-19
打赏
举报
回复
如果子线程是关闭主线程用的 会出现什么情况?
zjz800800
2006-06-19
打赏
举报
回复
假如在子线程里面没有阻塞的话肯定用WaitForSingleObject,100%能安全退出程序也不会造成泄漏这是肯定的,但现在讨论的是带阻塞的(比如accept),这样肯定泄漏,你测试的是没有阻塞的,测清楚在总结,:)
zdjnju
2006-06-18
打赏
举报
回复
在Windows看来,子线程和主线程根本没任何区别,当一个进程中所有线程已死时,Windows就认为进程已死!
如果主线程正常退出的话(main函数正常返回),确实会导致所有的子线程结束,但这只是因为主线程在内部调用了ExitProcess函数——这也就是说,如果主线程是由于其他原因被KILL掉的话(比如TerminateThread),子线程并不会退出,进程照样运行~
krfstudio
2006-06-17
打赏
举报
回复
一般无所谓啦,看你的具体需求是怎么样的,只要同步控制得好就没有问题。
zjz800800
2006-06-17
打赏
举报
回复
主线程里面关闭掉带有阻塞语句的子线程(因为在子线程的阻塞语句后面有释放某些申请的资源,所以主线程退出的时候,如果子线程不能正常退出就会出现泄露)
蒋晟
2006-06-17
打赏
举报
回复
No, again, use a timeout when waiting and use a message pump to prevent deadlock.
fireseed
2006-06-17
打赏
举报
回复
CloseHandle并不能结束线程,只是关掉线程的句柄,每一个打开的线程句柄在用完后都要关闭的,不然会内存泄露。
wfhlxl
2006-06-17
打赏
举报
回复
如果某个子线程正在使用打印机,主线程没把它关闭,自己退出了,那么子线程在打印完之前,其它程序无法使用,用了这么多年的windows,还没实践过这种情况.
zjz800800
2006-06-17
打赏
举报
回复
to krfstudio()
好的,这样吧,你解决一下(主线程里面关闭掉带有阻塞语句的子线程,因为阻塞语句后有释放在阻塞之前申请的资源),你给同步控制一下,看怎么个就没问题,我想因该有解决的方法就是你说的"只要同步控制得好就没有问题",关键是怎么个同步控制得好???
yayafu
2006-06-16
打赏
举报
回复
退出系统不会报错,CloseHandle也干不掉子线程。想清楚了再说
SuperKick
2006-06-16
打赏
举报
回复
再顶
smzbase
2006-06-16
打赏
举报
回复
退出时系统会报错舍,至于泄漏。。。个人表示怀疑
CloseHandle可以强制干掉子线程,后果是可能会出现泄漏
anothervip
2006-06-16
打赏
举报
回复
会吗?
zjz800800
2006-06-16
打赏
举报
回复
这种情况就是,如果有资源没来的急释放就会出现泄露
zjz800800
2006-06-16
打赏
举报
回复
上面还有人说会吗? 200%会,我现在这个问题(主线程里面关闭掉带有阻塞语句的子线程)
就是因为关不掉就造成了泄露,麻烦讨论的朋友看清楚上面的帖子了再回答,别光顾着说两句就抢分,鄙视中...
还有用Event来判断关闭带有阻塞语句的子线程行不通,会造成死锁。
萧山夜雨
2006-06-16
打赏
举报
回复
进程结否时,线程被强制结束。集成环境会报资源泄露。但对操作系统来说,进程结束,资源总可以全部释放。
gdsdyl
2006-06-16
打赏
举报
回复
正常情况下应该先退出子线程,再关闭主线程.
通常是采用Event\变量等方式让子线程自动退出.若直接关闭主线程,有可能会出现内存泄漏或系统报错,但要区分子线程使用了什么资源的情况下.
SuperKick
2006-06-15
打赏
举报
回复
再问一句,如果子线程没有退出主线程就退出了会出现什么情况呢?看见这么多高手进来忍不住要多问一句,嘿嘿。。。
加载更多回复(7)
Linux中
主
线程
和
子
线程
的
终止
次序
Linux中pthread是我们进行多
线程
并发时经常使用的,pthread创建的
子
线程
和
主
线程
的
终止
顺序有什么样的关系,下面通过代码来总结下。 在代码测试前,先说下结论: (1)
主
线程
和
子
线程
之间没有必然的退出次序关系。
主
线程
退出,
子
线程
可以继续执行;
子
线程
退出,
主
线程
也可以继续执行。 (2)程序加载到内存中执行的时候,进程就会生成一个
主
线程
。虽然
主
线程
和
子
线程
之间没...
主
线程
和
子
线程
的区别
主
线程
是程序的起点,它负责创建和管理其他
线程
。
主
线程
可以创建多个
子
线程
,并且可以等待
子
线程
完成后再
终止
。
子
线程
的生命周期可以独立于
主
线程
,可以在
主
线程
运行
期间创建和
终止
。在多
线程
编程中,合理管理
主
线程
和
子
线程
之间的关系非常重要,包括
线程
的创建、同步、通信等方面,以确保程序的正确性和性能。在多
线程
编程中,我们通常会涉及到
主
线程
(也称为父
线程
)和
子
线程
(也称为工作
线程
)。
主
线程
按照顺序执行程序的逻辑代码,而
子
线程
可以并行执行,与
主
线程
同时进行工作。
主
线程
负责创建和管理其他
线程
,而
子
线程
是由
主
线程
创建的。
java
主
线程
结束和
子
线程
结束之间的关系
java
主
线程
结束和
子
线程
结束之间的关系 你应该换成main函数
运行
,abcd就一定会打印出来了问题并不是出在
主
线程
和
子
线程
身上,事实上Java似乎也没有严格
主
线程
和
子
线程
的概念,取而代之的是普通
线程
和后台
线程
但是这里你采用@Test来
运行
代码,而@Test是JUnit测试框架使用的注解,JUnit在进行单元测试的时候,...
Linux下
主
线程
和
子
线程
的
终止
次序
Linux下
主
线程
和
子
线程
的
终止
次序 之前在完成一个任务时需要实现
主
线程
和
子
线程
分别处理自己的任务,为了验证
子
线程
的功能正常,需要让
主
线程
在
子
线程
之前结束,同时进程仍在
运行
。为了实现这种情况,特地了解
主
线程
和
子
线程
终止
次序的相关之前。 前提知识
主
线程
和
子
线程
之间没有必然的退出次序关系。
主
线程
退出,
子
线程
可以继续执行;
子
线程
退出,
主
线程
也可以继续执行。 程序加载到内存中执行的时候,进程就会生成一个
主
线程
。虽然
主
线程
和
子
线程
之间没有必然的退出次序关系,但是如果进程
终止
,那么进程下所有的
线程
都会
终止
。
Linux中
主
子
线程
的退出顺序
线程
的退出顺序
子
线程
先
终止
,
主
线程
后
终止
进程结束,所有
线程
都
终止
主
线程
先
终止
,
子
线程
后
终止
主
线程
和
子
线程
之间没有必然的退出次序关系。
主
线程
退出,
子
线程
可以继续执行;
子
线程
退出,
主
线程
也可以继续执行。 程序加载到内存中执行的时候,进程就会生成一个
主
线程
。虽然
主
线程
和
子
线程
之间没有必然的退出次序关系,但是如果进程
终止
,那么进程下所有的
线程
都会
终止
。
子
线程
先
终止
,
主
线程
后
终止
#include <stdio.h> #include <stdlib.h> #include &
进程/线程/DLL
15,467
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章