> ## 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-CA/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

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

*completionDispatchMode*   \_In\_\
Type : [XTaskQueueDispatchMode](/fr-CA/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>Cette fonction ne peut pas être appelée en toute sécurité sur un thread sensible au temps. Pour plus d'informations, consultez [Threads sensibles au temps](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-CA/reference/system/xtaskqueue/functions/xtaskqueueclosehandle).

Une file d'attente de tâches possède un port de travail et un port 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 au moyen de [XTaskQueueCreateComposite](/fr-CA/reference/system/xtaskqueue/functions/xtaskqueuecreatecomposite). Prenons l'exemple d'une API dont l'implémentation doit appeler une autre API qui utilise une file d'attente de tâches. Vous voudrez peut-être rediriger le rappel d'achèvement de l'API afin qu'il ne monopolise 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-CA/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-CA/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-CA/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue)
* [Vue d'ensemble de la bibliothèque XTaskQueue](/fr-CA/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [Modèle de programmation asynchrone](/fr-CA/build/core-features/common/async/async-programming-model)
* [Objectifs de conception et améliorations de la programmation asynchrone](/fr-CA/build/core-features/common/async/async-whitepaper)
* [Threads sensibles au temps](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Voir aussi

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