当父线程终止时,子线程是否退出

时间:2011-01-12 08:26:03

标签: c++ windows

我正在使用调用beginthreadex,endthreadex在Visual Studio C ++中进行一些多线程编程。

我创建了一个子线程thread1。子线程运行在一个永不退出的函数上,因为它具有无限循环。现在,如果父线程因错误终止或成功完成,子线程是否也会退出?我的疑问是 - 即使在主程序退出后,是否存在子线程仍处于活动状态的情况?

对于linux,这种情况应该如何?

3 个答案:

答案 0 :(得分:35)

线程之间没有父/子关系。如果线程A创建线程B然后线程A终止,则线程B将继续执行。

这个例外是当主线程(即运行main()函数的线程)终止时。发生这种情况时,进程终止,所有其他线程停止。

答案 1 :(得分:7)

由于C和C ++ mandate that returning from the main function kills all running threads,是的,这个过程应该消失了。由于该行为是由运行时完成的,因此Linux上的情况应该是相同的。

答案 2 :(得分:2)

一旦您的进程终止,所有资源都将被释放(内存,文件和线程)

执行此操作的正确方法:当您调用beginthread时,将返回的句柄保留在父线程中,并在离开程序之前调用 WaitForObject (我们 join 父线程与子线程)。

父线程将阻塞,直到子线程完成。如果您的子线程有无限循环,您可以定义一个“中断点”,并检查是否应该离开。例如,使用共享布尔变量。查看Interrupt Politely了解更多信息。

相关问题