我正在阅读有关_beginthreadex和_endthreadex的文档,但有些地方我不理解。

请注意,文档同时记录了“扩展”和正常函数,但我并未使用_beginthread和_endthread,只使用它们的扩展版本。

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

如果 _endthreadex 被自动调用,为什么调用它有助于确保“适当恢复资源”呢?我是否调用它都不应该有任何区别,或者说是否有区别?

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

如果_endthreadex不关闭句柄,为什么我不能用CloseHandle来关闭它?

我的所有线程都只通过从其主函数返回自愿终止,并且永远不会被强制终止。根据文档,当这种情况发生时,将自动调用_endthreadex。

然而,这并不会关闭句柄。假设我确实需要关闭它,尽管上面说过的,我该怎么做,因为此时线程已经死亡?我应该从另一个线程中关闭它吗?如果我让它保持打开状态会发生什么?