_endthread、_endthreadex

终止线程;_endthread 终止由 _beginthread 创建的线程,_endthreadex 终止由 _beginthreadex 创建的线程。

重要

此 API 不能用于在 Windows 运行时中执行的应用程序。有关详细信息,请参阅 /ZW 不支持 CRT 函数

void _endthread( void ); void _endthreadex(     unsigned retval  );

参数

  • retval
    线程退出代码。

备注

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

备注

对于与 Libcmt.lib 链接的可执行文件,请不要调用 Win32 ExitThread API;这会阻止运行时系统回收已分配的资源。_endthread 和 _endthreadex 回收分配的线程资源,然后调用 ExitThread。

_endthread 会自动关闭线程句柄。 (该行为与 Win32 ExitThread API 不同。)因此,当你使用 _beginthread 和 _endthread 时,请不要通过调用 Win32 CloseHandle API 来显式关闭线程句柄。

与 Win32 ExitThread API 相同,_endthreadex 不会关闭线程句柄。 因此,当你使用 _beginthreadex 和 _endthreadex 时,必须通过调用 Win32 CloseHandle API 来关闭线程句柄。

备注

_endthread 和 _endthreadex 会导致 C++ 析构函数在不会调用的线程中处于挂起状态。

要求

函数

必需的标头

_endthread

<process.h>

_endthreadex

<process.h>

有关更多兼容性信息,请参阅兼容性

仅限 C 运行库的多线程版本。

示例

请参阅 _beginthread 示例。

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例

请参见

参考

进程和环境控制

_beginthread、_beginthreadex