关闭

父线程退出后, 子线程会退出么?(我在Windows和Linux上都验证过)

560人阅读 评论(0) 收藏 举报
分类:

我们来看一个常见的基本问题:父线程退出后, 子线程会退出么? 

       我不喜欢人云亦云, 一贯主张大胆假设, 小心求证,貌似有点实证主义色彩了大笑, 不多说, 直接看程序:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #include <windows.h>  
  3.   
  4. DWORD WINAPI ThreadFun(LPVOID pM)  
  5. {  
  6.     while(1)  
  7.     {  
  8.         printf("子线程的线程ID号为:%d\n", GetCurrentThreadId());  
  9.     }  
  10.   
  11.     return 0;  
  12. }  
  13.   
  14. int xxmain()  
  15. {  
  16.     printf("main thread\n");  
  17.     HANDLE handle = CreateThread(NULL, 0, ThreadFun, NULL, 0, NULL);  
  18.     CloseHandle(handle);  
  19.   
  20.     Sleep(3000);  
  21.   
  22.     return 0;  
  23. }  
       从程序的运行结果中我们可以看到, 父线程(这里是主线程)退出后, 子线程也被强制退出了。  实际上, 主线程退出后, 进程也退出了, 所以上述子线程也退出了。


       我们继续来看:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #include <windows.h>  
  3.   
  4. DWORD WINAPI ThreadFun1(LPVOID pM)  
  5. {  
  6.     while(1)  
  7.     {  
  8.         printf("子线程的线程ID号为:%d\n", GetCurrentThreadId());  
  9.     }  
  10.   
  11.     return 0;  
  12. }  
  13.   
  14.   
  15. DWORD WINAPI ThreadFun2(LPVOID pM)  
  16. {  
  17.     HANDLE handle = CreateThread(NULL, 0, ThreadFun1, NULL, 0, NULL);  
  18.     CloseHandle(handle);  
  19.   
  20.     Sleep(3000);  
  21.     return 0;  
  22. }  
  23.   
  24. int main()  
  25. {  
  26.     printf("main thread\n");  
  27.     HANDLE handle = CreateThread(NULL, 0, ThreadFun2, NULL, 0, NULL);  
  28.     CloseHandle(handle);  
  29.   
  30.     while(1);  
  31.   
  32.     return 0;  
  33. }  
       我们专注看ThreadFun2(父线程)和ThreadFun1(子线程), 从运行结果, 我们看到, 程序一直在打印, 不会停歇。 也就是说, ThreadFun2退出了, 但ThreadFun1并没有退出。


      所以, 本文开头那个问题, 不能笼统回答, 要视情况而定。而且, 我在linux上也验证过, 也是这样的得意

0
0
查看评论

父子进程与父子线程退出分析

Linux下编程,线程、进程退出顺序问题纷纷扰扰,如果父进程/线程先于子进程/线程终止,系统会做什么处理呢?反之,如果子进程/线程先于父进程/线程终止,系统又会做什么处理呢?下面是我个人平时在笔记上做的一些象征性的总结,如果有疑问之处,大可提出,我一直认为怀疑是人类进步的根本所在。 一、线程 ...
  • le119126
  • le119126
  • 2015-08-01 11:40
  • 1446

看看进程、线程的父子关系

主线程调用pthread_join来等待子线程的结束,然后去ch
  • luckyjoy521
  • luckyjoy521
  • 2014-09-16 18:52
  • 2122

【Linux学习】pthread_create主线程与创建的新线程之间退出关系

我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下。   1、  主线程等待新线程先结束退出,主线程后退出。正常执行。 实例代码: #include "apue.h" #include pthre...
  • xiajun07061225
  • xiajun07061225
  • 2013-05-26 16:21
  • 17953

Linux C 关闭线程

http://blog.csdn.net/bbs598598/article/details/7536853   linux下 c中怎么让才能安全关闭线程 多线程退出有三种方式: (1)执行完成后隐式退出; (2)由线程本身...
  • NewThinker_wei
  • NewThinker_wei
  • 2013-10-08 22:00
  • 4596

主线程退出后,子线程会不会退出

额,好吧,这是个标题党,其实所有的线程都是平级的,根本不存在主线程和子线程。下文所述为了方便,将在main函数中的线程看做主线程,其它线程看成子线程,特此说明。先考虑以下代码:          #include #include #incl...
  • hyp1977
  • hyp1977
  • 2016-05-26 11:34
  • 2577

父线程结束时如何自动结束子线程

首先要指出这里的父线程不是主线程 这的确是个问题,也就是说怎么才能保证父线程结束后其子线程也都退出.有人说在父线程结束前结束掉子线程不就行了吗?但事实是,如何父线程被暴力时,根本无法正确处理子线程.个人认为有两种方法.       ...
  • magicyang87
  • magicyang87
  • 2008-01-28 02:04
  • 2479

父线程退出后, 子线程会退出么?(我在Windows和Linux上都验证过)

我们来看一个常见的基本问题:父线程退出后, 子线程会退出么?         我不喜欢人云亦云, 一贯主张大胆假设, 小心求证,貌似有点实证主义色彩了, 不多说, 直接看程序: #include #include DWORD WINAPI Th...
  • stpeace
  • stpeace
  • 2015-01-29 22:27
  • 6828

【线程关闭】主线程和子线程的关闭

今天写线程,再网页上找了些关闭线程的栗子,给大家整理一下~~~      多线程程序的开发中,启动了多个线程的程序在关闭的时候却出现了问题,如果程序退出的时候不关闭线程,那么线程就会一直的存在,但是大多启动的线程都是局部变量,不能一一的关闭,如果调用Thre...
  • amanda_zhang2010
  • amanda_zhang2010
  • 2017-04-01 17:23
  • 1841

VC退出线程的方法

标题很简单,但是要讨论的地方不少; 多线程管理,在程序开发中非常重要,虽然
  • chinabinlang
  • chinabinlang
  • 2014-04-23 10:24
  • 21948

父线程退出后, 子线程是否会退出

这个根据具体情况二定: 1、父线程是主线程,则父线程退出后, 子线程一定会退出。 2、父线程不是主线程,则父线程退出后, 子线程不会退出。
  • gx_wqm
  • gx_wqm
  • 2016-06-25 17:53
  • 254
    个人资料
    • 访问:10138次
    • 积分:194
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类