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

# XTaskQueueRegisterWaiter

> XTaskQueueRegisterWaiter

# XTaskQueueRegisterWaiter

Inscrit un handle d'attente auprès d'une file d'attente de tâches.

## Syntaxe

```cpp theme={null}
HRESULT XTaskQueueRegisterWaiter(  
         XTaskQueueHandle queue,  
         XTaskQueuePort port,  
         HANDLE waitHandle,  
         void* callbackContext,  
         XTaskQueueCallback* callback,  
         XTaskQueueRegistrationToken* token  
)  
```

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

*waitHandle*   \_In\_\
Type : HANDLE

Handle à surveiller.

<Note>Il s'agit du handle d'attente qui, lorsqu'il est signalé, entraîne l'appel du rappel. Le handle d'attente est généralement un événement à réinitialisation automatique ou manuelle. Si le handle d'attente est à réinitialisation manuelle, le rappel sera appelé à répétition tant que l'événement est signalé. Si ce n'est pas ce que vous voulez, réinitialisez l'événement pendant le rappel ou désinscrivez le rappel d'attente.</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.

*token*   \_Out\_\
Type : [XTaskQueueRegistrationToken\*](/fr-CA/reference/system/xtaskqueue/structs/xtaskqueueregistrationtoken)

Jeton d'inscription. Il peut être passé à [XTaskQueueUnregisterWaiter](/fr-CA/reference/system/xtaskqueue/functions/xtaskqueueunregisterwaiter) pour désinscrire l'attente.

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

Lorsque le handle d'attente est satisfait, la file d'attente de tâches appelle le rappel donné. Cela offre un moyen efficace d'ajouter des éléments à une file d'attente de tâches en réponse à la signalisation de handles.

L'exemple suivant inscrit un handle de noyau Win32 auprès d'une file d'attente de tâches. Votre rappel sera soumis à la file d'attente lorsque le handle sera signalé. Normalement, vous créeriez un événement à réinitialisation automatique pour la signalisation. Si le handle n'est pas à réinitialisation automatique, un nouveau rappel sera soumis à la fin du rappel en cours, tant que le handle est signalé.

```cpp theme={null}
void CreatingTaskQueueWaiter()
{
    HANDLE waitEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
    if (waitEvent == nullptr)
    {
        printf("Error creating wait handle: %d\r\n", GetLastError());
        return;
    }

    XTaskQueueHandle queue;

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

    if (FAILED(hr))
    {
        printf("Error creating task queue: %x\n", hr);
        CloseHandle(waitEvent);
        return;
    }

    auto callback = [](void*, bool)
    {
        printf("Callback invoked.\r\n");
    };

    XTaskQueueRegistrationToken token;

    hr = XTaskQueueRegisterWaiter(
        queue, 
        XTaskQueuePort::Completion, 
        waitEvent, 
        nullptr, 
        callback, 
        &token);

    if (FAILED(hr))
    {
        printf("Error registering task queue waiter: %x\n", hr);
        CloseHandle(waitEvent);
        XTaskQueueCloseHandle(queue);
        return;
    }

    // Now, whenever our wait event becomes signaled the callback will be called.
    for (uint32_t i = 0; i < 5; i++)
    {
        SetEvent(waitEvent);
        Sleep(100);
    }

    // Note: unregistering the waiter is optional
    XTaskQueueUnregisterWaiter(queue, token);
    XTaskQueueCloseHandle(queue);
    CloseHandle(waitEvent);
}
```

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

* [Vue d'ensemble de la bibliothèque XTaskQueue](/fr-CA/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [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

- [XTaskQueueRegisterWaiter](/reference/system/xtaskqueue/functions/xtaskqueueregisterwaiter.md)
- [XTaskQueueUnregisterWaiter](/reference/system/xtaskqueue/functions/xtaskqueueunregisterwaiter.md)
