> ## 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: Creación de una cola de tareas manual

> Procedimiento: Creación de una cola de tareas manual

## Ejemplo

Es posible que quiera controlar explícitamente los subprocesos que se usan para el trabajo y las finalizaciones de la cola de tareas. En estos
casos, cree una *cola de tareas manual* y distribuya las llamadas usted mismo. Si usa colas de tareas manuales,
debe asegurarse de que también procesen la cola de mensajes de Windows.

En el ejemplo siguiente se muestra cómo crear una cola de tareas procesada manualmente. Crea dos subprocesos
STL que distribuyen las llamadas tanto para el puerto de trabajo como para el puerto de finalización.

```c++ theme={null}
void CreatingTaskQueueWithManualThreads() 
{  
    // Create a manual task queue.  
    XTaskQueueHandle queue;  
  
    HRESULT hr = XTaskQueueCreate(  
        XTaskQueueDispatchMode::Manual,  
        XTaskQueueDispatchMode::Manual,  
        &queue);  
  
    if (FAILED(hr))  
    {  
        printf("Creating queue failed: 0x%x\r\n", hr);  
        return;  
    }  
  
    // We create threads to pump the queue: one thread for the work port  
    // and one thread for the completion port.  
    std::thread workThread([queue]  
    {  
        // XTaskQueueDispatch returns false when there's nothing to  
        // dispatch. Here, we wait forever for something new to come  
        // in. This will return false only if the queue is being  
        // terminated.  
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Work, INFINITE));  
    });  
  
    std::thread completionThread([queue]  
    {  
        // XTaskQueueDispatch returns false when there's nothing to  
        // dispatch. Here, we wait forever for something new to come  
        // in. This will return false only if the queue is being  
        // terminated.  
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Completion, INFINITE));  
    });  
  
    SubmitCallbacks(queue);  
  
    // Wait a while for the callbacks to run.  
    Sleep(1000);  
  
    // Terminating the queue will cause a waiting XTaskQueueDispatch to return  
    // false.  
    XTaskQueueTerminate(queue, true, nullptr, nullptr);  
  
    workThread.join();  
    completionThread.join();  
}  
```

## Consulte también

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


## Related topics

- [Procedimiento: Creación de una cola de tareas compuesta](/es/build/core-features/common/async/async-task-queue-design-howto/creating-composite-task-queue.md)
- [Procedimiento: Creación de una cola de tareas de grupo de subprocesos](/es/build/core-features/common/async/async-task-queue-design-howto/creating-thread-pool-task-queue.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)
- [Diseño de colas de tareas asincrónicas](/es/build/core-features/common/async/async-task-queue-design.md)
- [Ejemplo de creación de una cola de tareas](/es/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue.md)
