exitThread 函数 (processthreadsapi.h)

结束调用线程。

语法

void ExitThread(
  [in] DWORD dwExitCode
);

parameters

[in] dwExitCode

线程的退出代码。

返回值

备注

ExitThread 是在 C 代码中退出线程的首选方法。 但是,在 C++ 代码中,线程先退出,然后才能调用任何析构函数或执行任何其他自动清理。 因此,在 C++ 代码中,应从线程函数返回 。

当显式 (或通过从线程过程) 返回来调用此函数时,将解除分配当前线程的堆栈,取消由未与完成端口关联的线程启动的所有挂起 I/O,并且线程将终止。 调用所有附加动态链接库的入口点函数 (DLL) ,其值指示线程正在与 DLL 分离。

如果调用此函数时线程是进程中的最后一个线程,则线程的进程也会终止。

线程对象的状态将发出信号,释放已等待线程终止的任何其他线程。 线程的终止状态从 STILL_ACTIVE 更改为 dwExitCode 参数的值。

终止线程不一定从操作系统中删除线程对象。 关闭线程的最后一个句柄时,将删除线程对象。

ExitProcessExitThreadCreateThreadCreateRemoteThread 函数以及由于 CreateProcess 调用 () 而启动的进程在进程中相互序列化。 一次只能在地址空间中发生其中一个事件。 这意味着存在以下限制:

  • 在进程启动和 DLL 初始化例程期间,可以创建新线程,但在为进程完成 DLL 初始化之前,这些线程不会开始执行。
  • 一个进程中一个线程一次只能位于 DLL 初始化或分离例程中。
  • ExitProcess 在 DLL 初始化或分离例程中没有线程之前不会返回。
链接到静态 C 运行时库 (CRT) 的可执行文件中的线程应使用 _beginthread_endthread 进行线程管理,而不是 CreateThreadExitThread。 否则,当线程调用 ExitThread 时,会导致小内存泄漏。 另一个解决方法是将可执行文件链接到 DLL 中的 CRT,而不是静态 CRT。 请注意,仅当 DLL 链接到静态 CRT 且线程调用 DisableThreadLibraryCalls 函数时,才会从 DLL 发生此内存泄漏。 否则,从链接到静态 CRT 的 DLL 中的线程调用 CreateThreadExitThread 是安全的。

使用 GetExitCodeThread 函数检索线程的退出代码。

Windows Phone 8.1:Windows Phone 8.1 及更高版本上的 Windows Phone 应用商店应用支持此函数。

Windows 8.1Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。

示例

有关示例,请参阅 使用事件对象

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 processthreadsapi.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib;Windows Phone 8.1 上的 WindowsPhoneCore.lib
DLL Kernel32.dll;Windows Phone 8.1 上的 KernelBase.dll

请参阅

CreateProcess

CreateRemoteThread

CreateThread

ExitProcess

FreeLibraryAndExitThread

GetExitCodeThread

OpenThread

进程和线程函数

TerminateThread

线程