Skip to main content
Cette rubrique décrit la file d’attente de tâches du Microsoft Game Development Kit (GDK) utilisée conjointement avec le modèle de conception asynchrone du Microsoft Game Development Kit (GDK). Une file d’attente de tâches est une API permettant de mettre en file d’attente du travail et des rappels de tâches d’achèvement. Une file d’attente de tâches peut être configurée dans l’un de plusieurs modes de distribution, notamment un mécanisme de distribution manuelle que vous pouvez utiliser pour gérer avec précision les charges de travail des jeux.

Vue d’ensemble de l’API de file d’attente de tâches

Une file d’attente de tâches est un composite de deux ports de file d’attente : un port de travail et un port d’achèvement. Ces ports sont regroupés dans le même objet, car vous avez souvent besoin des deux : le port de travail pour effectuer le travail asynchrone et le port d’achèvement pour en informer l’utilisateur. Une file d’attente de tâches se décrit comme suit.
  • Elle contient deux ports de file d’attente de tâches.
  • Chaque port de file d’attente de tâches peut avoir son propre mode de distribution, qui détermine la façon dont les éléments de la file d’attente sont distribués.
  • Les modes de distribution vont de la distribution entièrement automatique via le pool de threads système à la distribution entièrement manuelle, où les tâches doivent être retirées explicitement.
  • Des rappels peuvent être soumis à l’un ou l’autre des ports de la file d’attente.
  • Les files d’attente sont représentées par des handles. Les handles peuvent être dupliqués, ce qui revient essentiellement à augmenter un nombre de références sur la file d’attente.
Vous pouvez configurer indépendamment chaque port de file d’attente de tâches en spécifiant un mode de distribution. Un mode de distribution détermine la façon dont les rappels mis en file d’attente sur un port sont traités. Il existe plusieurs modes de distribution.
  • Thread Pool (pool de threads) : les rappels mis en file d’attente dans une file de pool de threads sont exécutés sur le pool de threads système. Le pool de threads appelle les appels en parallèle, en prenant tour à tour un appel à exécuter dans la file d’attente à mesure que des threads du pool deviennent disponibles.
  • Serialized Thread Pool (pool de threads sérialisé) : les rappels sont mis en file d’attente et exécutés sur le pool de threads, mais ils s’exécutent l’un après l’autre au lieu de s’exécuter en parallèle sur tous les threads du pool.
  • Manual (manuel) : les rappels mis en file d’attente dans une file manuelle ne sont pas distribués automatiquement. C’est à vous de les distribuer sur le thread de votre choix. Si vous utilisez des files d’attente de tâches manuelles, vous devez vous assurer de pomper également la file d’attente de messages Windows.
  • Immediate (immédiat) : le mode de distribution immédiat ne met rien en file d’attente. Il exécute immédiatement l’appel sur le thread qui a soumis le rappel.
Un handle de file d’attente de tâches est une ressource partageable. La fermeture du handle libère une référence sur la file d’attente. La file d’attente n’est réellement détruite que lorsque toutes les références ont été libérées. XTaskQueueDuplicateHandle, XTaskQueueSubmitCallback, XTaskQueueSubmitDelayedCallback et XTaskQueueCreateComposite ajoutent tous une référence au handle de file d’attente. Cela signifie que la file d’attente n’est réellement détruite qu’une fois tous les rappels terminés. Un handle de file d’attente de tâches est une ressource propre au processus et ne peut pas être marshalé ni utilisé en dehors du processus.

Modèle d’utilisation

Le modèle d’utilisation typique d’une file d’attente de tâches est le suivant.
  1. Créez un handle de file d’attente de tâches, puis spécifiez les modes de distribution de chaque port.
  2. Si vous utilisez la distribution manuelle, établissez des threads propres à l’application pour appeler la fonction de distribution de la file d’attente.
  3. Utilisez la file d’attente comme paramètre des appels du Microsoft Game Development Kit (GDK) ou soumettez directement à l’aide de XTaskQueueCallback.
  4. Vous pouvez éventuellement arrêter la file d’attente de tâches lorsque votre application s’arrête.

Rubriques de procédures relatives à la file d’attente de tâches asynchrones

Cette section fournit des exemples de procédures pour des scénarios courants de file d’attente de tâches asynchrones.

Dans cette section

Création d’une file d’attente de tâches de pool de threads Fournit un exemple qui montre comment créer une file d’attente de tâches qui distribue les rappels de travail et d’achèvement sur le pool de threads système. Soumission de rappels Fournit un exemple qui montre comment un rappel est soumis au port de travail ou au port d’achèvement d’une file d’attente de tâches. Duplication d’un handle de file d’attente de tâches Fournit un exemple qui montre comment dupliquer un handle de file d’attente de tâches. Si vous avez un travail de longue durée, vous pouvez dupliquer le handle de la file d’attente de tâches pour la durée de ce travail. Ainsi, quiconque appelle XTaskQueueCloseHandle ne fermera pas la file d’attente tant que vous en avez encore besoin. Création d’une file d’attente de tâches manuelle Fournit un exemple qui montre comment créer une file d’attente de tâches pompée manuellement. Il crée deux threads STL qui distribuent les appels pour le port de travail et le port d’achèvement. Utilisation d’événements pour contrôler la distribution d’une file d’attente manuelle Fournit un exemple qui montre comment utiliser une file d’attente de tâches pour signaler une variable de condition lorsqu’elle contient des éléments à distribuer. Utilisation d’une file d’attente de tâches avec une boucle de messages Windows Fournit un exemple qui utilise le pool de threads pour le travail, mais intègre les rappels du port d’achèvement dans une procédure de fenêtre Win32. Cet exemple montre également comment arrêter correctement une file d’attente de tâches lorsque vous l’intégrez à un autre modèle de threading. Utilisation de la file d’attente de tâches du processus Fournit un exemple qui montre comment utiliser la file d’attente de tâches du processus. La file d’attente de tâches du processus par défaut utilise le pool de threads pour la distribution du travail et des achèvements. Création d’une file d’attente de tâches composite Fournit un exemple qui utilise le pool de threads pour le travail, mais intègre les rappels du port d’achèvement dans une fonction de rappel WindowProc Win32. Cet exemple montre également comment arrêter correctement une file d’attente de tâches lorsque vous l’intégrez à un autre modèle de threading. Utilisation de rappels différés Fournit un exemple qui montre comment utiliser des rappels différés, en appelant 10 rappels une fois toutes les 500 ms. Utilisez une file d’attente de tâches pour soumettre des rappels dans le futur à l’aide de l’API XTaskQueueSubmitDelayedCallback. Vous pouvez ainsi réessayer un appel ayant échoué après un court délai, ou l’utiliser comme minuteur peu coûteux pour des événements périodiques. Utilisation d’un waiter de file d’attente de tâches Fournit un exemple qui montre comment utiliser un waiter de file d’attente de tâches. Vous pouvez inscrire 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é.

Documentation de référence de l’API

Last modified on October 6, 2026