Compartir a través de


Función UnregisterWaitEx

Cancela una operación de espera registrada emitida por la función RegisterWaitForSingleObject .

Sintaxis

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

Parámetros

WaitHandle [in]

Identificador de espera. La función RegisterWaitForSingleObject devuelve este identificador.

CompletionEvent [in, opcional]

Identificador del objeto de evento que se va a indicar cuando se ha anulado el registro de la operación de espera. Este parámetro puede ser NULL.

Si este parámetro es INVALID_HANDLE_VALUE, la función espera a que se completen todas las funciones de devolución de llamada antes de devolver.

Si este parámetro es NULL, la función marca el temporizador para su eliminación y devuelve inmediatamente. Sin embargo, la mayoría de los autores de llamadas deben esperar a que se complete la función de devolución de llamada para que puedan realizar cualquier limpieza necesaria.

Si el autor de la llamada proporciona este evento y la función se ejecuta correctamente o se produce un error en la función con ERROR_IO_PENDING, no cierre el evento hasta que se señale.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

No se puede realizar una llamada de bloqueo a UnregisterWaitEx desde dentro de una función de devolución de llamada para la misma operación de espera. De lo contrario, la devolución de llamada estará esperando a que finalice. En general, una llamada de bloqueo a UnregisterWaitEx crea una dependencia entre el subproceso actual y la devolución de llamada, por lo que para realizar una llamada de bloqueo no registrado en otra operación de espera, debe asegurarse de que las funciones de devolución de llamada no dependen entre sí y que la segunda operación de espera tampoco realiza una llamada de bloqueo no registrado en la primera operación.

Tenga cuidado al realizar una llamada UnregisterWaitEx de bloqueo en un subproceso persistente. Si la operación de espera que se está anulando el registro se creó con WT_EXECUTEINPERSISTENTTHREAD, puede producirse un interbloqueo.

Después de realizar una llamada sin bloqueo a UnregisterWaitEx, no se pueden poner en cola nuevas funciones de devolución de llamada asociadas a WaitHandle . Sin embargo, puede haber funciones de devolución de llamada pendientes ya en cola en subprocesos de trabajo.

En algunas condiciones, se producirá un error en la función ERROR_IO_PENDING si CompletionEvent es NULL. Esto indica que hay funciones de devolución de llamada pendientes. Esas devoluciones de llamada se ejecutarán o se ejecutarán en medio de la ejecución.

Si CompletionEvent es un identificador de un evento proporcionado por el autor de la llamada, es posible que la función se realice correctamente, se produzca un error en ERROR_IO_PENDING o se produzca un error con un código de error diferente. Si la función se realiza correctamente o si se produce un error en la función con ERROR_IO_PENDING, el autor de la llamada siempre debe esperar hasta que se indique que el evento cierre el evento. Si se produce un error en la función con un código de error diferente, no es necesario esperar hasta que se indique que el evento cierre el evento.

Windows XP: Si CompletionEvent es un identificador de un evento proporcionado por el autor de la llamada y la función produce un error con ERROR_IO_PENDING, el autor de la llamada debe esperar hasta que se indique que el evento cierre el evento. Este comportamiento cambió a partir de Windows Vista.

Para compilar una aplicación que usa esta función, defina _WIN32_WINNT como 0x0500 o posterior. Para obtener más información, vea Usar los encabezados de Windows.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado
Threadpoollegacyapiset.h en Windows 8 y Windows Server 2012 (incluya Windows.h);
WinBase.h en Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP y Windows Server 2003 (incluyen Windows.h)
Biblioteca
Kernel32.lib
Archivo DLL
Kernel32.dll

Vea también

RegisterWaitForSingleObject

Funciones de sincronización

Agrupación de subprocesos