无法理解MSDN在_beginthreadex和_endthreadex上的文档

时间:2010-10-16 22:12:13

标签: c++ multithreading winapi

我正在阅读关于_beginthreadex_endthreadex的{​​{3}},但有一些我不明白的事情。

请注意,文档会同时记录“扩展”和普通函数,但我没有使用_beginthread_endthread;只有他们的扩展版本。


  

您可以调用_endthread或   _endthreadex显式终止一个线程;但是,_endthread或   当线程从线程返回时,会自动调用_endthreadex   例程作为参数传递。   通过调用终止线程   endthread或_endthreadex有助于   确保适当的资源回收   为线程分配。

  • 如果自动调用_endthreadex,如何调用它有助于确保“正确恢复资源”?无论我是否打电话,它都不应该有任何区别,或者是这样吗?

  

_endthread会自动关闭线程句柄(而_endthreadex   才不是)。因此,使用时   _beginthread和_endthread,不要显式关闭线程句柄   调用Win32 CloseHandle API。

  • 如果_endthreadex 没有关闭句柄,为什么我不应该使用CloseHandle关闭它?
  • 我的所有主题只是通过从主函数返回而自动终止,并且从不强行终止。根据文档,当发生这种情况时,会自动调用_endthreadex

    这虽然不会关闭手柄。假设我确实需要关闭它,尽管如上所述,我怎么能这样做,因为此时线程已经死了?我应该以某种方式从另一个线程关闭它吗?如果我把它打开会怎么样?

1 个答案:

答案 0 :(得分:5)

  

如果自动调用_endthreadex,为什么调用它有助于确保“正确恢复资源”?无论我是否打电话,它都不应该有任何区别,或者是这样吗?

我认为他们的意思是在你不使用标准方式终止你的线程的情况下。

  

如果_endthreadex没有关闭   处理,为什么我不应该关闭它   用CloseHandle?

使用CloseHandle时,您应该使用_endthreadex关闭它。文档说只有_endthread关闭句柄(因此CloseHandle调用是多余的。)

  

我的所有主题都是自愿的   从他们的主要回来终止   功能,永远不会有力   终止。根据   文档,当这发生时   _endthreadex会自动调用。

从启动它的线程中关闭线程句柄是一种常用的解决方案。您应该记住句柄并在适当的位置等待线程完成(使用WaitForSingleObject)然后关闭其句柄。如果不这样做,将导致资源泄漏。如果你有一些线程,这通常不是一个大问题,但这绝对不是一个好习惯。