UnregisterWaitEx 函式
取消 RegisterWaitForSingleObject 函式所發出的已註冊等候作業。
語法
BOOL WINAPI UnregisterWaitEx(
_In_ HANDLE WaitHandle,
_In_opt_ HANDLE CompletionEvent
);
參數
-
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 |
|
另請參閱