Windows XP上的线程

时间:2010-01-12 11:03:43

标签: multithreading windows-xp

如果在Windows XP操作系统上运行父线程的子线程,那么终止父线程是否也会终止其子线程?

4 个答案:

答案 0 :(得分:5)

在记录信息方面,Windows中没有“父线程”这样的东西。甚至没有严格的“父进程”概念 - Windows不记录创建者进程,只记录继承属性和句柄的进程。所以答案是否定的。

编辑:一个例子应该说清楚:你可以在另一个进程中创建一个线程,而不仅仅是你自己的。显然,当线程终止时,线程不会终止。

答案 1 :(得分:1)

否 - 线程属于进程,而不属于其他线程。如果创建它们的线程终止,则线程不会终止。

线程在以下时间终止:

  • 线程函数退出(正常或异常)。
  • 线程调用ExitThread或另一个结束线程的函数。
  • 任何线程使用相关线程的id调用TerminateThread函数。
  • 流程结束。

答案 2 :(得分:0)

不,除非父线程是应用程序的主线程。

答案 3 :(得分:0)

来自CreateThread()窗口API函数的MSDN描述:

“线程对象保留在系统中,直到线程终止,并且通过调用CloseHandle关闭了它的所有句柄。”

我对CreateThread如何工作的理解是,你基本上要求Windows生成一个线程,并为你希望线程调用的函数分配一个指针。当过程完成后,您“礼貌地”告诉窗口您不再需要该线程。

所以,我猜这一切都取决于应用程序的编写方式。使用为线程提供包装器的有用的开发语言将消除许多不确定性,特别是如果通过对象提供线程并在应用程序终止时适当地收集垃圾。

就操作系统而言,我同意“wj32”本身确实没有主线程,但我认为应用程序线程本身可以在概念上被视为“主线程”,前提是应用程序适当地管理线程资源分配。