Sur cette page

Qt Concurrent

Le module Qt Concurrent fournit des API de haut niveau qui permettent d'écrire des programmes multithreads sans avoir recours à des primitives de threading de bas niveau telles que les mutex, les verrous de 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 processeur disponibles. Cela signifie que les applications écrites aujourd’hui continueront à s’adapter 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, notamment une implémentation de MapReduce et FilterReduce pour les systèmes à mémoire partagée (non distribués), ainsi que des classes permettant de gérer les calculs asynchrones dans les applications GUI :

Qt Concurrent Prend en charge plusieurs types de conteneurs et d’itérateurs compatibles STL, mais fonctionne mieux avec les conteneurs Qt 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 de début/fin.

Présentation de la prise en charge des itérateurs STL :

Type d’itérateurExemples de classesStatut de prise en charge
Itérateur d'entréeNon pris en charge
Itérateur de sortieNon pris en charge
Itérateur vers l'avantstd::forward_listPris en charge
Itérateur bidirectionnelstd::listPrise en charge
Itérateur à accès aléatoireQList, std::vectorPris en charge et recommandé

Les itérateurs à accès aléatoire peuvent s'avérer plus rapides dans les cas où Qt Concurrent itère sur un grand nombre d'éléments légers, car ils permettent de passer directement à n'importe quel point du conteneur. De plus, l'utilisation d'itérateurs à accès aléatoire permet à Qt Concurrent de fournir des informations sur la progression via QFuture::progressValue() et QFutureWatcher::progressValueChanged().

Les fonctions de modification non in situ, telles que `mapped()` et `filtered()`, créent 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 plutôt les itérateurs de début et de fin du conteneur.

Utilisation du module

L'utilisation d'un module Qt nécessite une liaison avec la bibliothèque du module, soit directement, soit via d'autres dépendances. Plusieurs outils de compilation prennent cela en charge, notamment CMake et qmake.

Compilation 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 également la présentation de la compilation avec CMake.

Compilation avec qmake

Pour configurer le module en vue d'une compilation avec qmake, ajoutez le module en tant que valeur de la variable ` QT ` dans le fichier .pro du projet :

QT += concurrent

Exemples

Évolution du module

La section «Modifications apportées à Qt Concurrent » répertorie les modifications importantes apportées à l’API et aux fonctionnalités du module dans le cadre de 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 licence de logiciel libre : la licence publique générale restreinte GNU, version 3, ou la licence publique générale GNU, version 2. Pour plus d'informations, consultez la page Licences Qt.

© 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.