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

# Como: Criar uma fila de tarefas composta

> Exemplo que cria uma fila composta com XTaskQueueCreateComposite a partir da porta de trabalho de outra fila, além de uma alternativa que usa o modo de despacho Immediate.

## Exemplo

Uma *fila de tarefas composta* é uma fila de tarefas formada por partes de outras filas. Filas de tarefas compostas são úteis quando uma tarefa assíncrona precisa chamar outra, e a conclusão dessa tarefa é uma etapa intermediária que não deve desperdiçar ciclos no thread de conclusão. Nesse caso, uma fila composta pode ser criada. As portas de trabalho e de conclusão dessa fila composta usam a porta de trabalho da fila original.

O exemplo a seguir usa o pool de threads para o trabalho, mas integra os retornos de chamada da porta de conclusão a uma função de retorno de chamada WindowProc do Win32. Este exemplo também demonstra o encerramento correto de uma fila de tarefas quando você a integra a outro modelo de threading.

```c++ theme={null}
void CreatingCompositeQueue()  
{  
    XTaskQueueHandle queue;  
  
    HRESULT hr = XTaskQueueCreate(  
        XTaskQueueDispatchMode::ThreadPool,  
        XTaskQueueDispatchMode::Manual,  
        &queue);  
  
    if (FAILED(hr))  
    {  
        printf("Failed to create task queue: 0x%x\r\n", hr);  
        return;  
    }  
  
    XTaskQueuePortHandle workPort;  
  
    // Create a composite queue that uses the work port from  
    // another queue for both the work and the completion ports.  
  
    hr = XTaskQueueGetPort(queue, XTaskQueuePort::Work, &workPort);  
    if (FAILED(hr))  
    {  
        printf("Failed to get work port 0x%x\r\n", hr);  
        XTaskQueueCloseHandle(queue);  
        return;  
    }  
  
    XTaskQueueHandle compositeQueue;  
    hr = XTaskQueueCreateComposite(workPort, workPort, &compositeQueue);  
    if (FAILED(hr))  
    {  
        printf("Failed to create composite queue 0x%x\r\n", hr);  
        XTaskQueueCloseHandle(queue);  
        return;  
    }  
  
    // Use the queue as needed.  
    SubmitCallbacks(compositeQueue);  
  
    // Wait a while for the callbacks to run.  
    Sleep(1000);  
  
    XTaskQueueCloseHandle(compositeQueue);  
    XTaskQueueCloseHandle(queue);  
}  
```

Outra técnica para isso é criar uma fila local cujos tipos de despacho de trabalho e de conclusão sejam *imediatos*. Um modo de despacho imediato não envolve nenhuma atividade assíncrona: ele despacha os retornos de chamada assim que são enviados, conforme mostrado no exemplo de código a seguir.

```c++ theme={null}
void CreatingImmediateQueue()  
{  
    XTaskQueueHandle queue;  
  
    HRESULT hr = XTaskQueueCreate(  
        XTaskQueueDispatchMode::Immediate,  
        XTaskQueueDispatchMode::Immediate,  
        &queue);  
  
    if (FAILED(hr))  
    {  
        printf("Failed to create task queue: 0x%x\r\n", hr);  
        return;  
    }  
  
    // Use the queue as needed.  
    SubmitCallbacks(queue);  
  
    // Wait a while for the callbacks to run.  
    Sleep(1000);  
  
    XTaskQueueCloseHandle(queue);  
}  
```

## Consulte também

[Projetando a fila de tarefas](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-task-queue-design.md)


## Related topics

- [Como: criar uma fila de tarefas manual](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-task-queue-design-howto/creating-manual-task-queue.md)
- [Como: criar uma fila de tarefas de pool de threads](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-task-queue-design-howto/creating-thread-pool-task-queue.md)
- [Como: usar uma fila de tarefas com um loop de mensagens do Windows](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-task-queue-design-howto/task-queue-windows-msg-loop.md)
- [Como: usar um waiter de fila de tarefas](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-task-queue-design-howto/using-task-queue-waiter.md)
- [Como: usar a fila de tarefas do processo](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-task-queue-design-howto/using-process-task-queue.md)
