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

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

我创build一个子线程thread1。 子线程运行在一个永远不会退出的函数上,因为它有一个无限循环。 现在,如果父线程终止错误或成功完成,子线程是否也退出? 我的疑问是 – 即使在主程序退出之后,是否还存在子线程还活着的情况?

对于Linux应该怎么样呢?

Solutions Collecting From Web of "当父线程终止时,子线程是否退出?"

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

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

由于C和C ++的要求,从main函数返回杀死所有正在运行的线程 ,是的,这个过程应该消失。 而且由于这个行为是由运行时完成的,所以在Linux上情况应该是一样的。

只要你的进程死了,所有的资源正在释放(内存,文件和线程)

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

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