Função UnregisterWaitEx (threadpoollegacyapiset.h)

Cancela uma operação de espera registrada emitida pela função RegisterWaitForSingleObject .

Sintaxe

BOOL UnregisterWaitEx(
  [in]           HANDLE WaitHandle,
  [in, optional] HANDLE CompletionEvent
);

Parâmetros

[in] WaitHandle

O identificador de espera. Esse identificador é retornado pela função RegisterWaitForSingleObject .

[in, optional] CompletionEvent

Um identificador para o objeto de evento a ser sinalizado quando a operação de espera tiver sido cancelada. Este parâmetro pode ser NULL.

Se esse parâmetro for INVALID_HANDLE_VALUE, a função aguardará a conclusão de todas as funções de retorno de chamada antes de retornar.

Se esse parâmetro for NULL, a função marcará o temporizador para exclusão e retornará imediatamente. No entanto, a maioria dos chamadores deve aguardar a conclusão da função de retorno de chamada para que eles possam executar qualquer limpeza necessária.

Se o chamador fornecer esse evento e a função for bem-sucedida ou a função falhar com ERROR_IO_PENDING, não feche o evento até que ele seja sinalizado.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Você não pode fazer uma chamada de bloqueio para UnregisterWaitEx de dentro de uma função de retorno de chamada para a mesma operação de espera. Caso contrário, o retorno de chamada estará aguardando a conclusão. Em geral, uma chamada de bloqueio para UnregisterWaitEx cria uma dependência entre o thread atual e o retorno de chamada, portanto, para fazer uma chamada de cancelamento de registro de bloqueio em outra operação de espera, você deve garantir que as funções de retorno de chamada não dependam umas das outras e que a segunda operação de espera também não execute uma chamada de cancelamento de registro de bloqueio na primeira operação.

Tenha cuidado ao fazer uma chamada UnregisterWaitEx de bloqueio em um thread persistente. Se a operação de espera não registrada tiver sido criada com WT_EXECUTEINPERSISTENTTHREAD, poderá ocorrer um deadlock.

Depois de fazer uma chamada sem bloqueio para UnregisterWaitEx, nenhuma nova função de retorno de chamada associada ao WaitHandle pode ser enfileirada. No entanto, pode haver funções de retorno de chamada pendentes já enfileiradas em threads de trabalho.

Em algumas condições, a função falhará com ERROR_IO_PENDING se CompletionEvent for NULL. Isso indica que há funções de retorno de chamada pendentes. Esses retornos de chamada serão executados ou estarão no meio da execução.

Se CompletionEvent for um identificador para um evento fornecido pelo chamador, é possível que a função tenha êxito, falhe com ERROR_IO_PENDING ou falhe com um código de erro diferente. Se a função for bem-sucedida ou se a função falhar com ERROR_IO_PENDING, o chamador sempre deverá aguardar até que o evento seja sinalizado para fechar o evento. Se a função falhar com um código de erro diferente, não será necessário aguardar até que o evento seja sinalizado para fechar o evento.

Windows XP: Se CompletionEvent for um identificador para um evento fornecido pelo chamador e a função falhar com ERROR_IO_PENDING, o chamador deverá aguardar até que o evento seja sinalizado para fechar o evento. Esse comportamento mudou a partir do Windows Vista.

Para compilar um aplicativo que usa essa função, defina _WIN32_WINNT como 0x0500 ou posterior. Para obter mais informações, consulte Usando os cabeçalhos do Windows.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho threadpoollegacyapiset.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

Registerwaitforsingleobject

Funções de sincronização

Pool de threads