> ## 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/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é, provoque l'invocation 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 invoqué de manière répétée tant que l'événement est signalé. Si ce n'est pas ce que vous souhaitez, réinitialisez l'événement dans 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/reference/system/xtaskqueue/functions/xtaskqueuecallback)

Pointeur vers la fonction de rappel.

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

Jeton d'inscription. Il peut être passé à [XTaskQueueUnregisterWaiter](/fr/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>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>

Lorsque le handle d'attente est satisfait, la file d'attente de tâches invoque le rappel donné. Cela offre un moyen efficace d'ajouter des éléments à une file d'attente de tâches en réponse au signalement 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éez un événement à réinitialisation automatique à utiliser 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/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [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

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