> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XTaskQueueRegisterWaiter

> XTaskQueueRegisterWaiter

# XTaskQueueRegisterWaiter

Registra un identificador de espera con una cola de tareas.

## Sintaxis

```cpp theme={null}
HRESULT XTaskQueueRegisterWaiter(  
         XTaskQueueHandle queue,  
         XTaskQueuePort port,  
         HANDLE waitHandle,  
         void* callbackContext,  
         XTaskQueueCallback* callback,  
         XTaskQueueRegistrationToken* token  
)  
```

### Parámetros

*queue*   \_In\_\
Tipo: XTaskQueueHandle

La cola a la que se enviará la devolución de llamada.

*port*   \_In\_\
Tipo: [XTaskQueuePort](/reference/system/xtaskqueue/enums/xtaskqueueport)

El puerto al que se enviará la devolución de llamada. Las devoluciones de llamada se pueden asignar a los puertos de trabajo o de finalización.

*waitHandle*   \_In\_\
Tipo: HANDLE

El identificador que se supervisará.

<Note>Este es el identificador de espera que, cuando se señala, hace que se invoque la devolución de llamada. El identificador de espera suele ser un evento de restablecimiento automático o manual. Si el identificador de espera es de restablecimiento manual, la devolución de llamada se invocará repetidamente mientras el evento esté señalado. Si esto no es lo que quiere, restablezca el evento dentro de la devolución de llamada o anule el registro de la devolución de llamada de espera.</Note>

*callbackContext*   \_In\_opt\_\
Tipo: void\*

Un puntero de contexto opcional que se pasará a la devolución de llamada.

*callback*   \_In\_\
Tipo: [XTaskQueueCallback\*](/reference/system/xtaskqueue/functions/xtaskqueuecallback)

Un puntero a la función de devolución de llamada.

*token*   \_Out\_\
Tipo: [XTaskQueueRegistrationToken\*](/reference/system/xtaskqueue/structs/xtaskqueueregistrationtoken)

Un token de registro. Se puede pasar a [XTaskQueueUnregisterWaiter](/reference/system/xtaskqueue/functions/xtaskqueueunregisterwaiter) para anular el registro de la espera.

### Valor devuelto

Tipo: HRESULT

Código de error o de éxito HRESULT.

## Comentarios

<Note>No es seguro llamar a esta función en un subproceso sensible al tiempo. Para obtener más información, consulte [Subprocesos sensibles al tiempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads).</Note>

Cuando se satisface el identificador de espera, la cola de tareas invoca la devolución de llamada especificada. Esto proporciona una manera eficaz de agregar elementos a una cola de tareas en respuesta a identificadores que se señalan.

En el ejemplo siguiente se registra un identificador de kernel Win32 con una cola de tareas. La devolución de llamada se enviará a la cola cuando el identificador se señale. Normalmente, crearía un evento de restablecimiento automático para usarlo en la señalización. Si el identificador no es de restablecimiento automático, se enviará una nueva devolución de llamada cuando se complete la devolución de llamada actual, mientras el identificador siga señalado.

```cpp theme={null}
void CreatingTaskQueueWaiter()
{
    HANDLE waitEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
    if (waitEvent == nullptr)
    {
        printf("Error creating wait handle: %d\r\n", GetLastError());
        return;
    }

    XTaskQueueHandle queue;

    HRESULT hr = XTaskQueueCreate(
        XTaskQueueDispatchMode::ThreadPool,
        XTaskQueueDispatchMode::ThreadPool, 
        &queue);

    if (FAILED(hr))
    {
        printf("Error creating task queue: %x\n", hr);
        CloseHandle(waitEvent);
        return;
    }

    auto callback = [](void*, bool)
    {
        printf("Callback invoked.\r\n");
    };

    XTaskQueueRegistrationToken token;

    hr = XTaskQueueRegisterWaiter(
        queue, 
        XTaskQueuePort::Completion, 
        waitEvent, 
        nullptr, 
        callback, 
        &token);

    if (FAILED(hr))
    {
        printf("Error registering task queue waiter: %x\n", hr);
        CloseHandle(waitEvent);
        XTaskQueueCloseHandle(queue);
        return;
    }

    // Now, whenever our wait event becomes signaled the callback will be called.
    for (uint32_t i = 0; i < 5; i++)
    {
        SetEvent(waitEvent);
        Sleep(100);
    }

    // Note: unregistering the waiter is optional
    XTaskQueueUnregisterWaiter(queue, token);
    XTaskQueueCloseHandle(queue);
    CloseHandle(waitEvent);
}
```

## Requisitos

**Encabezado:** XTaskQueue.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatibles:** Windows, consolas de la familia XBOX One y consolas XBOX Series

## Documentación conceptual

* [Información general de la biblioteca XTaskQueue](/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [Subprocesos sensibles al tiempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Consulte también

[Miembros de XTaskQueue](/reference/system/xtaskqueue/xtaskqueue_members)\
[Modelo de programación asincrónica](/build/core-features/common/async/async-programming-model)\
[Diseño de la cola de tareas asincrónicas](/build/core-features/common/async/async-task-queue-design)
