UnregisterWaitEx 函数

取消 RegisterWaitForSingleObject 函数发出的已注册等待操作。

语法

BOOL WINAPI UnregisterWaitEx(
  _In_     HANDLE WaitHandle,
  _In_opt_ HANDLE CompletionEvent
);

parameters

WaitHandle [in]

等待句柄。 此句柄由 RegisterWaitForSingleObject 函数返回。

CompletionEvent [in, optional]

取消注册等待操作时要发出信号的事件对象的句柄。 此参数可以为 NULL。

如果此参数 INVALID_HANDLE_VALUE,该函数将等待所有回调函数完成,然后再返回。

如果此参数为 NULL,则该函数将标记计时器以供删除并立即返回。 但是,大多数调用方应等待回调函数完成,以便可以执行任何所需的清理。

如果调用方提供此事件,并且函数成功或函数失败并 ERROR_IO_PENDING,则不要关闭事件,直到收到信号。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError

备注

对于同一等待操作,不能从回调函数中对 UnregisterWaitEx 进行阻止调用。 否则,回调将等待自身完成。 通常,对 UnregisterWaitEx 的阻止调用会在当前线程和回调之间创建依赖关系,因此,若要对另一个等待操作进行阻止性取消注册调用,必须确保回调函数不相互依赖,并且第二个等待操作不会对第一个操作执行阻止性注销调用。

在持久线程上发出阻止 UnregisterWaitEx 调用时要小心。 如果使用 WT_EXECUTEINPERSISTENTTHREAD 创建正在注销的等待操作,则可能会出现死锁。

UnregisterWaitEx 进行非阻止调用后,无法排队与 WaitHandle 关联的新回调函数。 但是,可能有挂起的回调函数已排队到工作线程。

在某些情况下,如果 CompletionEventNULL,函数将失败并ERROR_IO_PENDING。 这表示存在未完成的回调函数。 这些回调要么将执行,要么正在执行中。

如果 CompletionEvent 是调用方提供的事件的句柄,则函数可能会成功、失败并 出现ERROR_IO_PENDING或失败并出现其他错误代码。 如果函数成功,或者函数失败并 出现ERROR_IO_PENDING,则调用方应始终等待,直到收到事件关闭事件的信号。 如果函数失败并出现不同的错误代码,则无需等待事件收到关闭事件的信号。

Windowsxp: 如果 CompletionEvent 是调用方提供的事件的句柄,并且函数失败并 出现ERROR_IO_PENDING,则调用方应等待事件收到关闭事件的信号。 从 Windows Vista 开始,此行为已更改。

若要编译使用此函数的应用程序, 请将_WIN32_WINNT 定义为 0x0500 或更高版本。 有关详细信息,请参阅 使用 Windows 标头

要求

要求
最低受支持的客户端
Windows XP [仅限桌面应用]
最低受支持的服务器
Windows Server 2003 [仅限桌面应用]
标头
Windows 8 和 Windows Server 2012 (上的 Threadpoollegacyapiset.h 包括 Windows.h) ;
Windows 7、Windows Server 2008 R2、Windows Vista、Windows Server 2008、Windows XP 和 Windows Server 2003 上的 WinBase.h (包括 Windows.h)

Kernel32.lib
DLL
Kernel32.dll

另请参阅

RegisterWaitForSingleObject

同步函数

线程池