2011-01-12 86 views
20

我正在使用调用beginthreadex,endthreadex调用Visual Studio C++中的一些多线程编程。当父线程终止时子线程退出

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

对于linux应该如何应对?

+1

这是一个密切相关的问题:http://stackoverflow.com/questions/2197699/is-it-necessary-to-explicitly-stop-all-threads-prior-to-exiting-a-win32-applicati – sharptooth 2011-01-12 08:28:11

+0

The帖子有冲突的答案。 – excray 2011-01-12 09:41:29

+0

@ user97642从你的角度来看,有什么冲突?所有的答案似乎都是相似的。 – 2011-01-12 10:20:57

回答

31

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

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

7

由于C和C++ mandate that returning from the main function kills all running threads,是的,该过程应该消失。由于这种行为是由运行时完成的,所以在Linux上情况应该是一样的。

+0

您提供的链接没有提及*杀死*(!)所有线程的语言要求。它仅引用了从main返回等价于调用exit()的要求。 – 2016-07-13 08:22:17

2

只要您的进程死掉,所有的资源都被释放(内存,文件和线程)

做到这一点,正确的方法:当你打电话beginthread,保持返回的句柄父线程,在离开程序之前调用WaitForObject(我们加入父线程与子线程)。

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