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

# XTaskQueueSubmitDelayedCallback

> XTaskQueueSubmitDelayedCallback

# XTaskQueueSubmitDelayedCallback

Soumet un rappel à la file d'attente pour le port donné.

## Syntaxe

```cpp theme={null}
HRESULT XTaskQueueSubmitDelayedCallback(  
         XTaskQueueHandle queue,  
         XTaskQueuePort port,  
         uint32_t delayMs,  
         void* callbackContext,  
         XTaskQueueCallback* callback  
)  
```

### Paramètres

*queue*   \_In\_\
Type : XTaskQueueHandle

File d'attente à laquelle soumettre le rappel.

*port*   \_In\_\
Type : [XTaskQueuePort](/fr-CA/reference/system/xtaskqueue/enums/xtaskqueueport)

Port auquel soumettre le rappel. Les rappels peuvent être affectés aux ports de travail ou d'achèvement.

*delayMs*   \_In\_\
Type : uint32\_t

Nombre de millisecondes d'attente avant de soumettre le rappel à la file d'attente.

<Note>Un rappel peut être soumis pour être ajouté à la file d'attente à un moment ultérieur. Si *delayMs* n'est pas nul, le rappel est placé dans une liste en attente et un minuteur est initialisé avec le prochain délai d'attente le plus proche. Lorsque le délai est écoulé, le rappel ayant le délai suivant est placé dans la liste d'exécution. La file d'attente déclenche un [XTaskQueueMonitorCallback](/fr-CA/reference/system/xtaskqueue/functions/xtaskqueuemonitorcallback) et, si la file d'attente s'exécute dans un mode de distribution par pool de threads, du travail est soumis au pool de threads.</Note>

*callbackContext*   \_In\_opt\_\
Type : void\*

Pointeur de contexte facultatif qui sera passé au rappel.

*callback*   \_In\_\
Type : [XTaskQueueCallback\*](/fr-CA/reference/system/xtaskqueue/functions/xtaskqueuecallback)

Pointeur vers la fonction de rappel.

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.

## Remarques

Ce rappel sera ajouté à la file d'attente après *delayMs* millisecondes.

<img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/reference/note.gif?s=6c1a4c009b25ad5315c45ce51bc83983" alt="alert" width="10" height="10" data-path="images/gdk/reference/note.gif" /> **Remarque sur les performances :**\
L'ajout d'un élément à une file d'attente doit se faire sans verrou ni attente afin de satisfaire aux exigences de performances du code en amont. Les API suivantes sont sans verrou :

* [XTaskQueueSubmitCallback](/fr-CA/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback)
* [XTaskQueueSubmitDelayedCallback](/fr-CA/reference/system/xtaskqueue/functions/xtaskqueuesubmitdelayedcallback)
* [XTaskQueueDispatch](/fr-CA/reference/system/xtaskqueue/functions/xtaskqueuedispatch), à condition que 0 soit passé pour *timeoutInMs*

L'exemple suivant permet de soumettre des rappels dans le futur à l'aide de la fonction **XTaskQueueSubmitDelayedCallback**. C'est un excellent moyen de réessayer un appel ayant échoué après un court délai; cela peut aussi servir de minuteur peu coûteux pour des événements périodiques.

<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 SubmittingDelayedCallback()
{
    XTaskQueueHandle queue;

    HRESULT hr = XTaskQueueCreate(
        XTaskQueueDispatchMode::ThreadPool,
        XTaskQueueDispatchMode::ThreadPool, 
        &queue);

    if (FAILED(hr))
    {
        printf("failed to create task queue: 0x%x\r\n", hr);
        return;
    }

    struct CallContext
    {
        DWORD count;
        XTaskQueueHandle queue;
        XTaskQueueCallback* callback;
    } callContext;

    auto callback = [](void* context, bool cancel)
    {
        CallContext *callContext = static_cast<CallContext*>(context);
        callContext->count++;
        printf("Periodic callback %d\r\n", callContext->count);
        if (callContext->count != 10 && !cancel)
        {
            HRESULT hr = XTaskQueueSubmitDelayedCallback(
                callContext->queue, 
                XTaskQueuePort::Completion, 
                500, 
                callContext, 
                callContext->callback);

            if (FAILED(hr))
            {
                printf("Failed submitting next callback: 0x%x\r\n", hr);
                callContext->count = 10; // Prevent us from waiting forever.
            }
        }
    };

    callContext.count = 0;
    callContext.queue = queue;
    callContext.callback = callback;

    // Use the task queue to make 10 periodic calls
    hr = XTaskQueueSubmitDelayedCallback(
        queue,
        XTaskQueuePort::Completion,
        500,
        &callContext,
        callback);

    if (FAILED(hr))
    {
        printf("Failed submitting delayed callback: 0x%x\r\n", hr);
        XTaskQueueCloseHandle(queue);
        return;
    }

    // Now wait for all the calls to complete.
    while (callContext.count != 10)
    {
        Sleep(1000);
    }

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

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

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

- [XTaskQueueSubmitDelayedCallback](/reference/system/xtaskqueue/functions/xtaskqueuesubmitdelayedcallback.md)
- [How to: Using delayed callbacks](/build/core-features/common/async/async-task-queue-design-howto/using-delayed-callbacks.md)
- [XTaskQueueSubmitCallback](/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback.md)
- [XTaskQueuePort](/reference/system/xtaskqueue/enums/xtaskqueueport.md)
- [XTaskQueueMonitorCallback](/reference/system/xtaskqueue/functions/xtaskqueuemonitorcallback.md)
