> ## 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.

# Procedimiento: Uso de un elemento de espera de cola de tareas

> Procedimiento: Uso de un elemento de espera de cola de tareas

## Ejemplo

Puede registrar un identificador de kernel de Win32 con una cola de tareas. Su devolución de llamada se enviará a la cola cuando el identificador reciba una señal. 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 envía una nueva devolución de llamada cuando la devolución de llamada actual se completa, mientras el identificador siga señalado.

En el ejemplo siguiente se muestra cómo usar un elemento de espera de cola de tareas.

```c++ 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);  
}  
```

## Salida de ejemplo

```
Callback invoked.  
Callback invoked.  
Callback invoked.  
Callback invoked.  
Callback invoked.  
```

## Consulte también

[Diseño de la cola de tareas](/build/core-features/common/async/async-task-queue-design)


## Related topics

- [Diseño de colas de tareas asincrónicas](/es/build/core-features/common/async/async-task-queue-design.md)
- [Procedimiento: Uso de eventos para controlar la distribución manual de colas](/es/build/core-features/common/async/async-task-queue-design-howto/control-manual-queue-dispatching.md)
- [Procedimiento: Uso de una cola de tareas con un bucle de mensajes de Windows](/es/build/core-features/common/async/async-task-queue-design-howto/task-queue-windows-msg-loop.md)
- [Procedimiento: Uso de la cola de tareas del proceso](/es/build/core-features/common/async/async-task-queue-design-howto/using-process-task-queue.md)
- [Procedimiento: Duplicación de un identificador de cola de tareas](/es/build/core-features/common/async/async-task-queue-design-howto/duplicating-task-queue-handle.md)
