Skip to main content

XTaskQueueTerminate

Termine une file d’attente de tâches en annulant tous les éléments en attente et en empêchant la mise en file d’attente de nouveaux éléments.

Syntaxe

Paramètres

queue   _In_
Type : XTaskQueueHandle
File d’attente à terminer. wait   _In_
Type : bool
True pour attendre la fin de la terminaison. callbackContext   _In_opt_
Type : void*
Pointeur de contexte facultatif à passer au rappel. callback   _In_opt_
Type : XTaskQueueTerminatedCallback*
Rappel facultatif qui sera appelé lorsque la file d’attente aura été terminée.

Valeur de retour

Type : HRESULT Code de réussite ou d’erreur HRESULT.

Remarques

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.
XTaskQueueCloseHandle se contente de décrémenter un décompte de références interne sur l’objet file d’attente de tâches. S’il reste des rappels dans la file d’attente, ces rappels détiennent une référence sur l’objet file d’attente et peuvent encore être appelés. Cela peut poser problème lors de l’arrêt de l’application. Lorsqu’une application s’arrête, elle doit s’assurer qu’aucun rappel intempestif ne s’exécute après le nettoyage. XTaskQueue fournit l’API XTaskQueueTerminate pour effectuer une terminaison contrôlée d’une file d’attente. La terminaison d’une file d’attente de tâches effectue les opérations suivantes :
  1. Tous les rappels des deux ports sont appelés avec leur paramètre canceled défini sur true.
  2. Tous les rappels en attente sur le port de travail sont distribués. La soumission de nouveaux rappels au port de travail échoue avec E_ABORT.
  3. Tous les rappels en attente sur le port d’achèvement sont distribués. La soumission de nouveaux rappels au port d’achèvement échoue avec E_ABORT.
Une fois ce processus terminé, XTaskQueueTerminate retourne si wait est true. Si wait est false, la terminaison se produit de façon asynchrone. Si vous fournissez un rappel de terminaison, il sera appelé à partir du thread d’achèvement à la fin de la terminaison.
  • XTaskQueueTerminate ne ferme pas le handle de la file d’attente. Après la terminaison, vous devez toujours appeler XTaskQueueCloseHandle.
  • Si vous appelez XTaskQueueTerminate sur un thread qui traite les rappels de la file d’attente en appelant XTaskQueueDispatch, ne passez pas true pour le paramètre wait, sinon votre code risque de se retrouver en interblocage.
L’exemple suivant montre comment terminer une file d’attente de tâches créée précédemment.
SubmitCallback est une fonction d’assistance définie dans l’exemple de code de la fonction XTaskQueueSubmitCallback.
Une file d’attente de tâches peut être intégrée à un thread d’interface utilisateur. En général, vous voudrez que les rappels mis en file d’attente sur le port d’achèvement s’exécutent sur le thread d’interface utilisateur. Cet exemple 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. Il montre également comment terminer correctement une file d’attente de tâches lors de son intégration à un autre modèle de threads.

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

Voir aussi

Membres de XTaskQueue
Modèle de programmation asynchrone
Conception de la file d’attente de tâches asynchrones
Last modified on October 6, 2026