说起多线程,我们可以说起一大堆和它相关的有趣话题来,比如什么子孙线程关系,父子线程关系,线程同步异步之类的研究话题来,而我今天所说的,是关于父子线程的一些有趣现象。
首先提出一个问题,“在多线程的应用程序中,当父线程结束之后,子线程会不会退出呢?”,本文将围绕这个问题,深入分析windows中父子线程的生命周期及他们之间的关系。
我们知道,不管你使用的是何种编程语言,但当我们在windows下编程,且使用了平台相关性的库的时候,不管我们使用什么函数来创建线程,最终的结果是,我们的代码中都会调用CreateThread来创建线程,当然,这个工作是由你所使用的库封装完成的,你可以不用关心它是如何工作的。而在线程的使命完成之后,必须结束的时候,我们的代码中又会调用ExitThread或是TeriminateThread来终止线程运行,其中,前一个函数一般用来终止自己,后一个函数可以终止任何线程,大多被用来终止其它线程。
在《Windows 核心编程》中告诉我们,一般情况下,尽量让线程自己返回而不要使用ExitThread或是TeriminateThread来强制终止线程,也不要让包含线程的进程在线程结束前就终止的方式来结束线程。为啥呢?
一般情况下,对于线程函数的正常返回,这才是最好的处理方式,线程函数正常返回,会处理下面4件事情:
1.线程函数中创建的所有C++对象都通过其析构函数被正常析构。
2.操作系统正确释放线程栈使用的内存。
3.操作系统把线程的退出代码设为线程函数的返回值。
深入解析父子线程
最新推荐文章于 2025-06-20 14:19:15 发布