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

# XTaskQueueCreate

> XTaskQueueCreate

# XTaskQueueCreate

Cria uma fila de tarefas, que pode ser usada para enfileirar e expedir chamadas.

## Sintaxe

```cpp theme={null}
HRESULT XTaskQueueCreate(  
         XTaskQueueDispatchMode workDispatchMode,  
         XTaskQueueDispatchMode completionDispatchMode,  
         XTaskQueueHandle* queue  
)  
```

### Parâmetros

*workDispatchMode*   \_In\_\
Tipo: [XTaskQueueDispatchMode](/pt-BR/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

O modo de expedição da porta de "trabalho" da fila.

*completionDispatchMode*   \_In\_\
Tipo: [XTaskQueueDispatchMode](/pt-BR/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

O modo de expedição da porta de "conclusão" da fila.

*queue*   \_Out\_\
Tipo: XTaskQueueHandle\*

A fila recém-criada.

### Valor retornado

Tipo: HRESULT

Código de sucesso ou de erro HRESULT.

## Comentários

<Note>Não é seguro chamar esta função em um thread sensível ao tempo. Para obter mais informações, consulte [Threads sensíveis ao tempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads).</Note>

Filas de tarefas são objetos com contagem de referências. Libere a referência chamando [XTaskQueueCloseHandle](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueueclosehandle).

Uma fila de tarefas tem portas de trabalho e de conclusão, e as tarefas podem ser enfileiradas em qualquer uma delas. Cada porta pode ser configurada com seu próprio modo de expedição.

Na maioria dos cenários, você cria uma fila de tarefas com a API **XTaskQueueCreate**. No entanto, se você estiver encadeando várias chamadas assíncronas, às vezes é útil criar uma fila composta por meio de [XTaskQueueCreateComposite](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuecreatecomposite). Considere uma API cuja implementação precisa invocar outra API que usa uma fila de tarefas. Talvez você queira redirecionar o retorno de chamada de conclusão da API para que ele não ocupe o thread de conclusão do chamador. Nesse caso, você pode criar uma fila de tarefas composta cujas portas de trabalho e de conclusão são criadas a partir da porta de trabalho de outra fila.

O exemplo a seguir cria uma fila de tarefas que expede retornos de chamada de trabalho e de conclusão no pool de threads do sistema.

<Note>**SubmitCallback** é uma função auxiliar definida no exemplo de código da função [XTaskQueueSubmitCallback](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback).</Note>

```cpp theme={null}
void CreatingTaskQueue()
{
    XTaskQueueHandle queue;
    HRESULT hr = XTaskQueueCreate(XTaskQueueDispatchMode::ThreadPool, XTaskQueueDispatchMode::ThreadPool, &queue);
    if (FAILED(hr))
    {
        printf("Creating queue failed: 0x%x\r\n", hr);
        return;
    }

    SubmitCallbacks(queue);

    // Wait a while for the callbacks to run
    Sleep(1000);

    XTaskQueueTerminate(queue, true, nullptr, nullptr);
}
```

O exemplo a seguir cria uma fila de tarefas bombeada manualmente. Ele cria dois threads STL que expedem chamadas para as portas de trabalho e de conclusão.

<Note>**SubmitCallback** é uma função auxiliar definida no exemplo de código da função [XTaskQueueSubmitCallback](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback).</Note>

```cpp 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 for the work port
    // and one for the completion port.
    std::thread workThread([queue]
    {
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Work, INFINITE));
    });

    std::thread completionThread([queue]
    {
        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 DispatchTaskQueue to return
    // false.  
    XTaskQueueTerminate(queue, true, nullptr, nullptr);

    workThread.join();
    completionThread.join();
}
```

## Requisitos

**Cabeçalho:** XTaskQueue.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatíveis:** Windows, consoles da família XBOX One e consoles XBOX Series

## Documentação conceitual

* [Criar fila de tarefas](/pt-BR/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue)
* [Visão geral da biblioteca XTaskQueue](/pt-BR/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [Modelo de programação assíncrona](/pt-BR/build/core-features/common/async/async-programming-model)
* [Metas de design e melhorias da programação assíncrona](/pt-BR/build/core-features/common/async/async-whitepaper)
* [Threads sensíveis ao tempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Confira também

[Membros de XTaskQueue](/pt-BR/reference/system/xtaskqueue/xtaskqueue_members)\
[Modelo de programação assíncrona](/pt-BR/build/core-features/common/async/async-programming-model)\
[Design da fila de tarefas assíncrona](/pt-BR/build/core-features/common/async/async-task-queue-design)


## Related topics

- [XTaskQueueCreate](/zh-CN/reference/system/xtaskqueue/functions/xtaskqueuecreate.md)
- [XTaskQueueCreateComposite](/reference/system/xtaskqueue/functions/xtaskqueuecreatecomposite.md)
- [Create task queue example](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue.md)
- [XTaskQueue](/reference/system/xtaskqueue/xtaskqueue_members.md)
- [XTaskQueueDispatchMode](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode.md)
