Skip to main content
Cette rubrique décrit la file d’attente de tâches du Microsoft Game Development Kit (GDK) qui est 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 le travail et les 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, y compris un mécanisme de distribution manuelle que vous pouvez utiliser pour gérer soigneusement 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 composée 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 parce que 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 par le pool de threads du 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 compteur 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.
  • Pool de threads : Les rappels mis en file d’attente dans une file d’attente du pool de threads sont exécutés sur le pool de threads du système. Le pool de threads appelle les appels en parallèle, prenant tour à tour un appel à exécuter dans la file d’attente à mesure que les threads du pool de threads deviennent disponibles.
  • Pool de threads sérialisé : Les rappels sont mis en file d’attente et exécutés sur le pool de threads, mais ils sont exécutés l’un après l’autre au lieu de s’exécuter en parallèle sur tous les threads du pool de threads.
  • Manuel : Les rappels mis en file d’attente dans une file d’attente 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.
  • 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 sont libérées. XTaskQueueDuplicateHandle, XTaskQueueSubmitCallback, XTaskQueueSubmitDelayedCallback et XTaskQueueCreateComposite ajoutent tous une référence au handle de la file d’attente. Cela signifie que la file d’attente n’est réellement détruite qu’une fois tous les rappels achevés. Un handle de file d’attente de tâches est une ressource propre à chaque 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, si vous le souhaitez, terminer la file d’attente de tâches lorsque votre application s’arrête.

Rubriques de procédures sur 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 du 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 du 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 pourriez vouloir dupliquer le handle de la file d’attente de tâches pendant la durée du travail. Ainsi, quiconque appelle XTaskQueueCloseHandle ne fermera pas la file d’attente tant que vous en aurez 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 manuelle de la file d’attente 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 (Window proc) Win32. Cet exemple montre également comment terminer correctement une file d’attente de tâches lorsque vous l’intégrez à un autre modèle de threads. 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 terminer correctement une file d’attente de tâches lorsque vous l’intégrez à un autre modèle de threads. 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 ultérieurs à l’aide de l’API XTaskQueueSubmitDelayedCallback. Ainsi, vous pouvez réessayer un appel ayant échoué après un court délai, ou l’utiliser comme minuterie peu coûteuse pour des événements périodiques. Utilisation d’un élément d’attente de file d’attente de tâches Fournit un exemple qui montre comment utiliser un élément d’attente (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