UnregisterWaitEx-Funktion

Bricht einen registrierten Wartevorgang ab, der von der RegisterWaitForSingleObject-Funktion ausgegeben wird.

Syntax

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

Parameter

WaitHandle [in]

Das Wait-Handle. Dieses Handle wird von der RegisterWaitForSingleObject-Funktion zurückgegeben.

CompletionEvent [in, optional]

Ein Handle für das Ereignisobjekt, das signalisiert werden soll, wenn die Registrierung des Wartevorgangs aufgehoben wurde. Dieser Parameter kann NULL sein.

Wenn dieser Parameter INVALID_HANDLE_VALUE ist, wartet die Funktion, bis alle Rückruffunktionen abgeschlossen sind, bevor sie zurückgegeben wird.

Wenn dieser Parameter NULL ist, markiert die Funktion den Timer für das Löschen und gibt sofort zurück. Die meisten Aufrufer sollten jedoch warten, bis die Rückruffunktion abgeschlossen ist, damit sie alle erforderlichen Bereinigungen durchführen können.

Wenn der Aufrufer dieses Ereignis bereitstellt und die Funktion erfolgreich ist oder die Funktion mit ERROR_IO_PENDING fehlschlägt, schließen Sie das Ereignis erst, wenn es signalisiert wird.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Bemerkungen

Sie können keinen blockierenden Aufruf von UnregisterWaitEx innerhalb einer Rückruffunktion für denselben Wartevorgang ausführen. Andernfalls wartet der Rückruf darauf, dass er abgeschlossen ist. Im Allgemeinen erstellt ein blockierende Aufruf von UnregisterWaitEx eine Abhängigkeit zwischen dem aktuellen Thread und dem Rückruf. Wenn Sie also einen blockierenden Aufruf zur Aufhebung der Registrierung für einen anderen Wartevorgang ausführen möchten, müssen Sie sicherstellen, dass die Rückruffunktionen nicht voneinander abhängen und dass der zweite Wartevorgang nicht auch einen blockierenden Aufruf zum Aufheben der Registrierung für den ersten Vorgang ausführt.

Seien Sie vorsichtig, wenn Sie einen blockierenden UnregisterWaitEx-Aufruf für einen persistenten Thread ausführen. Wenn der Wartevorgang, der die Registrierung aufgehoben wird, mit WT_EXECUTEINPERSISTENTTHREAD erstellt wurde, kann es zu einem Deadlock kommen.

Nach dem nicht blockierenden Aufruf von UnregisterWaitEx können keine neuen Rückruffunktionen, die WaitHandle zugeordnet sind, in die Warteschlange eingereiht werden. Es kann jedoch ausstehende Rückruffunktionen geben, die bereits in Workerthreads in die Warteschlange eingereiht wurden.

Unter einigen Bedingungen schlägt die Funktion mit ERROR_IO_PENDING fehl, wenn CompletionEventNULL ist. Dies gibt an, dass ausstehende Rückruffunktionen vorhanden sind. Diese Rückrufe werden entweder ausgeführt oder befinden sich in der Mitte der Ausführung.

Wenn CompletionEvent ein Handle für ein vom Aufrufer bereitgestelltes Ereignis ist, ist es möglich, dass die Funktion erfolgreich ist, mit ERROR_IO_PENDING fehlschlägt oder mit einem anderen Fehlercode fehlschlägt. Wenn die Funktion erfolgreich ist oder die Funktion mit ERROR_IO_PENDING fehlschlägt, sollte der Aufrufer immer warten, bis das Ereignis signalisiert wird, um das Ereignis zu schließen. Wenn die Funktion mit einem anderen Fehlercode fehlschlägt, ist es nicht erforderlich, zu warten, bis das Ereignis signalisiert wird, um das Ereignis zu schließen.

Windows XP: Wenn CompletionEvent ein Handle für ein vom Aufrufer bereitgestelltes Ereignis ist und die Funktion mit ERROR_IO_PENDING fehlschlägt, sollte der Aufrufer warten, bis das Ereignis signalisiert wird, um das Ereignis zu schließen. Dieses Verhalten hat sich ab Windows Vista geändert.

Um eine Anwendung zu kompilieren, die diese Funktion verwendet, definieren Sie _WIN32_WINNT als 0x0500 oder höher. Weitere Informationen finden Sie unter Verwenden der Windows-Header.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2003 [nur Desktop-Apps]
Header
Threadpoollegacyapiset.h auf Windows 8 und Windows Server 2012 (einschließlich Windows.h);
WinBase.h unter Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP und Windows Server 2003 (einschließlich Windows.h)
Bibliothek
Kernel32.lib
DLL
Kernel32.dll

Siehe auch

Registerwaitforsingleobject

Synchronisierungsfunktionen

Pooling von Threads