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 关联的新回调函数。 但是,可能有挂起的回调函数已排队到工作线程。
在某些情况下,如果 CompletionEvent 为 NULL,函数将失败并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 [仅限桌面应用] |
标头 |
|
库 |
|
DLL |
|
另请参阅