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

Crée une file d'attente de tâches, qui peut être utilisée pour mettre en file d'attente et distribuer des appels.

## Syntaxe

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

### Paramètres

*workDispatchMode*   \_In\_\
Type : [XTaskQueueDispatchMode](/fr/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

Mode de distribution du port « travail » de la file d'attente.

*completionDispatchMode*   \_In\_\
Type : [XTaskQueueDispatchMode](/fr/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

Mode de distribution du port « achèvement » de la file d'attente.

*queue*   \_Out\_\
Type : XTaskQueueHandle\*

File d'attente nouvellement créée.

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.

## Remarques

<Note>Il n'est pas sûr d'appeler cette fonction sur un thread urgent. Pour plus d'informations, consultez [Threads urgents](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads).</Note>

Les files d'attente de tâches sont des objets avec décompte de références. Libérez la référence en appelant [XTaskQueueCloseHandle](/fr/reference/system/xtaskqueue/functions/xtaskqueueclosehandle).

Une file d'attente de tâches possède des ports de travail et d'achèvement, et des tâches peuvent être mises en file d'attente sur l'un ou l'autre port. Chaque port peut être configuré avec son propre mode de distribution.

Dans la plupart des scénarios, vous créez une file d'attente de tâches avec l'API **XTaskQueueCreate**. Toutefois, si vous enchaînez plusieurs appels asynchrones, il est parfois utile de créer une file d'attente composite via [XTaskQueueCreateComposite](/fr/reference/system/xtaskqueue/functions/xtaskqueuecreatecomposite). Prenons l'exemple d'une API dont l'implémentation doit invoquer une autre API qui utilise une file d'attente de tâches. Vous pouvez vouloir rediriger le rappel d'achèvement de l'API afin qu'il n'occupe pas le thread d'achèvement de l'appelant. Dans ce cas, vous pouvez créer une file d'attente de tâches composite dont les ports de travail et d'achèvement sont construits à partir du port de travail d'une autre file d'attente.

L'exemple suivant crée une file d'attente de tâches qui distribue les rappels de travail et d'achèvement sur le pool de threads du système.

<Note>**SubmitCallback** est une fonction d'assistance définie dans l'exemple de code de la fonction [XTaskQueueSubmitCallback](/fr/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);
}
```

L'exemple suivant crée une file d'attente de tâches pompée manuellement. Il crée deux threads STL qui distribuent les appels pour les ports de travail et d'achèvement.

<Note>**SubmitCallback** est une fonction d'assistance définie dans l'exemple de code de la fonction [XTaskQueueSubmitCallback](/fr/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();
}
```

## Configuration requise

**En-tête :** XTaskQueue.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, consoles de la famille XBOX One et consoles XBOX Series

## Documentation conceptuelle

* [Créer une file d'attente de tâches](/fr/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue)
* [Vue d'ensemble de la bibliothèque XTaskQueue](/fr/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [Modèle de programmation asynchrone](/fr/build/core-features/common/async/async-programming-model)
* [Objectifs de conception et améliorations de la programmation asynchrone](/fr/build/core-features/common/async/async-whitepaper)
* [Threads urgents](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Voir aussi

[Membres XTaskQueue](/fr/reference/system/xtaskqueue/xtaskqueue_members)\
[Modèle de programmation asynchrone](/fr/build/core-features/common/async/async-programming-model)\
[Conception de la file d'attente de tâches asynchrones](/fr/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)
