Sur cette page

Qt Concurrent

Le module Qt Concurrent fournit des API de haut niveau qui permettent d'écrire des programmes multithreadés sans utiliser de primitives de threading de bas niveau telles que les mutex, les verrous en lecture-écriture, les conditions d'attente ou les sémaphores. Les programmes écrits avec Qt Concurrent ajustent automatiquement le nombre de threads utilisés en fonction du nombre de cœurs de processeurs disponibles. Cela signifie que les applications écrites aujourd'hui continueront à évoluer lorsqu'elles seront déployées sur des systèmes multicœurs à l'avenir.

Qt Concurrent comprend des API de style programmation fonctionnelle pour le traitement parallèle de listes, y compris une implémentation MapReduce et FilterReduce pour les systèmes à mémoire partagée (non distribués), et des classes pour la gestion des calculs asynchrones dans les applications d'interface graphique :

Qt Concurrent prend en charge plusieurs types de conteneurs et d'itérateurs compatibles avec la STL, mais fonctionne mieux avec les conteneurs Qt XML dotés d'itérateurs à accès aléatoire, tels que QList. Les fonctions map et filter acceptent à la fois les conteneurs et les itérateurs begin/end.

Vue d'ensemble de la prise en charge des itérateurs STL :

Type d'itérateurClasses d'exempleStatut du support
Itérateur d'entréeNon supporté
Itérateur de sortieNon pris en charge
Itérateur de progressionstd::forward_listPris en charge
Itérateur bidirectionnelstd::listPris en charge
Itérateur à accès aléatoireQListstd::vectorPris en charge et recommandé

Les itérateurs à accès aléatoire peuvent être plus rapides lorsque Qt Concurrent itère sur un grand nombre d'éléments légers, car ils permettent de passer à n'importe quel point du conteneur. En outre, l'utilisation d'itérateurs à accès aléatoire permet à Qt Concurrent de fournir des informations sur la progression par l'intermédiaire de QFuture::progressValue() et QFutureWatcher::progressValueChanged().

Les fonctions de modification non in situ telles que mapped() et filtered() effectuent une copie du conteneur lorsqu'elles sont appelées. Si vous utilisez des conteneurs STL, cette opération de copie peut prendre un certain temps. Dans ce cas, nous vous recommandons de spécifier les itérateurs de début et de fin du conteneur.

Utilisation du module

L'utilisation d'un module Qt nécessite l'établissement d'un lien avec la bibliothèque du module, soit directement, soit par l'intermédiaire d'autres dépendances. Plusieurs outils de construction ont un support dédié pour cela, y compris CMake et qmake.

Construction avec CMake

Utilisez la commande find_package() pour localiser les composants du module nécessaires dans le paquet Qt6:

find_package(Qt6 REQUIRED COMPONENTS Concurrent)
target_link_libraries(mytarget PRIVATE Qt6::Concurrent)

Voir aussi l'aperçu de la construction avec CMake.

Construction avec qmake

Pour configurer le module afin qu'il soit construit avec qmake, ajoutez le module comme valeur de la variable QT dans le fichier .pro du projet :

QT += concurrent

Exemples

Évolution du module

Changes to Qt Concurrent liste les changements importants dans l'API et les fonctionnalités du module qui ont été effectués pour la série Qt 6 de Qt.

Licences

Le module Qt Concurrent est disponible sous licence commerciale auprès de The Qt Company. Il est également disponible sous des licences de logiciel libre : La licence GNU Lesser General Public License, version 3, ou la licence GNU General Public License, version 2. Voir Qt Licensing pour plus de détails.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.