Condividi tramite


Funzione UnregisterWaitEx

Annulla un'operazione di attesa registrata rilasciata dalla funzione RegisterWaitForSingleObject .

Sintassi

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

Parametri

WaitHandle [in]

Handle di attesa. Questo handle viene restituito dalla funzione RegisterWaitForSingleObject .

CompletamentoEvent [in, facoltativo]

Handle dell'oggetto evento da segnalare quando l'operazione di attesa è stata annullata. Questo parametro può essere NULL.

Se questo parametro è INVALID_HANDLE_VALUE, la funzione attende il completamento di tutte le funzioni di callback prima della restituzione.

Se questo parametro è NULL, la funzione contrassegna il timer per l'eliminazione e restituisce immediatamente. Tuttavia, la maggior parte dei chiamanti deve attendere il completamento della funzione di callback in modo da poter eseguire qualsiasi pulizia necessaria.

Se il chiamante fornisce questo evento e la funzione ha esito positivo o la funzione ha esito negativo con ERROR_IO_PENDING, non chiudere l'evento finché non viene segnalato.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Osservazioni

Non è possibile effettuare una chiamata di blocco a UnregisterWaitEx dall'interno di una funzione di callback per la stessa operazione di attesa. In caso contrario, il callback sarà in attesa del completamento. In generale, una chiamata di blocco a UnregisterWaitEx crea una dipendenza tra il thread corrente e il callback, in modo da eseguire una chiamata di annullamento della registrazione in un'altra operazione di attesa, è necessario assicurarsi che le funzioni di callback non dipendono tra loro e che la seconda operazione di attesa non esegue anche una chiamata di annullamento della registrazione per la prima operazione.

Prestare attenzione quando si effettua una chiamata di blocco UnregisterWaitEx su un thread persistente. Se l'operazione di attesa non registrata è stata creata con WT_EXECUTEINPERSISTENTTHREAD, potrebbe verificarsi un deadlock.

Dopo aver effettuato una chiamata senza blocco a UnregisterWaitEx, non è possibile accodare nuove funzioni di callback associate a WaitHandle . Tuttavia, potrebbero essere presenti funzioni di callback in sospeso già accodate ai thread di lavoro.

In alcune condizioni, la funzione avrà esito negativo con ERROR_IO_PENDING se CompletionEvent è NULL. Ciò indica che sono presenti funzioni di callback in sospeso. Tali callback verranno eseguiti o si trovano al centro dell'esecuzione.

Se CompletionEvent è un handle per un evento fornito dal chiamante, è possibile che la funzione abbia esito positivo, abbia esito negativo con ERROR_IO_PENDING o abbia esito negativo con un codice di errore diverso. Se la funzione ha esito positivo o se la funzione ha esito negativo con ERROR_IO_PENDING, il chiamante deve sempre attendere fino a quando l'evento non viene segnalato per chiudere l'evento. Se la funzione ha esito negativo con un codice di errore diverso, non è necessario attendere fino a quando l'evento non viene segnalato per chiudere l'evento.

Windows XP: Se CompletionEvent è un handle a un evento fornito dal chiamante e la funzione ha esito negativo con ERROR_IO_PENDING, il chiamante deve attendere fino a quando l'evento non viene segnalato per chiudere l'evento. Questo comportamento è cambiato a partire da Windows Vista.

Per compilare un'applicazione che usa questa funzione, definire _WIN32_WINNT come 0x0500 o versioni successive. Per altre informazioni, vedere Uso delle intestazioni di Windows.

Requisiti

Requisito Valore
Client minimo supportato
Windows XP [solo app desktop]
Server minimo supportato
Windows Server 2003 [solo app desktop]
Intestazione
Threadpoollegacyapiset.h in Windows 8 e Windows Server 2012 (includono Windows.h);
WinBase.h in Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP e Windows Server 2003 (includono Windows.h)
Libreria
Kernel32.lib
DLL
Kernel32.dll

Vedere anche

Registerwaitforsingleobject

Funzioni di sincronizzazione

Pooling dei thread