> ## 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/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 à attendre avant de soumettre le rappel à la file d'attente.

<Note>Un rappel peut être soumis afin d'être ajouté à la file d'attente à un moment ultérieur. Si *delayMs* est différent de zéro, le rappel est placé dans une liste en attente et un minuteur est initialisé avec le temps d'attente le plus proche. Lorsque ce délai est écoulé, le rappel correspondant est placé dans la liste d'exécution. La file d'attente déclenche un [XTaskQueueMonitorCallback](/fr/reference/system/xtaskqueue/functions/xtaskqueuemonitorcallback) et, si la file d'attente s'exécute dans un mode de distribution de pool de threads, un travail de pool de threads est soumis.</Note>

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

Pointeur de contexte facultatif qui sera passé au rappel.

*callback*   \_In\_\
Type : [XTaskQueueCallback\*](/fr/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="alerte" 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/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback)
* [XTaskQueueSubmitDelayedCallback](/fr/reference/system/xtaskqueue/functions/xtaskqueuesubmitdelayedcallback)
* [XTaskQueueDispatch](/fr/reference/system/xtaskqueue/functions/xtaskqueuedispatch), à condition que 0 soit passé pour *timeoutInMs*

L'exemple suivant permet de soumettre des rappels ultérieurement à 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 également 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/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 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

- [XTaskQueuePort](/fr/reference/system/xtaskqueue/enums/xtaskqueueport.md)
- [XTaskQueueSubmitCallback](/fr/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback.md)
- [XTaskQueueMonitorCallback](/fr/reference/system/xtaskqueue/functions/xtaskqueuemonitorcallback.md)
- [XTaskQueueCallback](/fr/reference/system/xtaskqueue/functions/xtaskqueuecallback.md)
- [XTaskQueueDispatch](/fr/reference/system/xtaskqueue/functions/xtaskqueuedispatch.md)
