Qt Concurrent

Das Modul Qt Concurrent bietet High-Level-APIs, die es ermöglichen, Multi-Thread-Programme zu schreiben, ohne Low-Level-Threading-Primitive wie Mutexe, Lese- und Schreibsperren, Wartebedingungen oder Semaphoren zu verwenden. Mit Qt Concurrent geschriebene Programme passen die Anzahl der verwendeten Threads automatisch an die Anzahl der verfügbaren Prozessorkerne an. Das bedeutet, dass Anwendungen, die heute geschrieben werden, auch in Zukunft auf Multi-Core-Systemen eingesetzt werden können.

Qt Concurrent enthält APIs im Stil der funktionalen Programmierung für die parallele Listenverarbeitung, einschließlich einer MapReduce- und FilterReduce-Implementierung für Shared-Memory-Systeme (nicht verteilte Systeme), sowie Klassen für die Verwaltung asynchroner Berechnungen in GUI-Anwendungen:

Qt Concurrent unterstützt mehrere STL-kompatible Container- und Iterator-Typen, funktioniert aber am besten mit Qt-Containern, die Iteratoren mit wahlfreiem Zugriff haben, wie QList. Die Funktionen map und filter akzeptieren sowohl Container als auch begin/end Iteratoren.

STL Iterator-Unterstützung im Überblick:

Iterator-TypBeispiel KlassenUnterstützungsstatus
Eingabe-IteratorNicht unterstützt
Ausgabe-IteratorNicht unterstützt
Vorwärts-Iteratorstd::slistUnterstützt
Bidirektionaler Iteratorstd::listUnterstützt
Iterator mit wahlfreiem ZugriffQListstd::vectorUnterstützt und empfohlen

Iteratoren mit wahlfreiem Zugriff können in Fällen, in denen Qt Concurrent über eine große Anzahl von leichtgewichtigen Elementen iteriert, schneller sein, da sie das Überspringen eines beliebigen Punktes im Container erlauben. Darüber hinaus ermöglicht die Verwendung von Iteratoren mit wahlfreiem Zugriff Qt Concurrent die Bereitstellung von Fortschrittsinformationen durch QFuture::progressValue() und QFutureWatcher::progressValueChanged().

Die Funktionen, die nicht an Ort und Stelle modifizieren, wie mapped() und filtered(), erstellen beim Aufruf eine Kopie des Containers. Wenn Sie STL-Container verwenden, kann dieser Kopiervorgang einige Zeit in Anspruch nehmen. In diesem Fall empfehlen wir, stattdessen die Anfangs- und End-Iteratoren für den Container anzugeben.

Verwendung des Moduls

Die Verwendung eines Qt-Moduls erfordert eine Verknüpfung mit der Modulbibliothek, entweder direkt oder über andere Abhängigkeiten. Mehrere Build-Tools bieten hierfür spezielle Unterstützung, darunter CMake und qmake.

Bauen mit CMake

Verwenden Sie den Befehl find_package(), um die benötigten Modulkomponenten im Paket Qt6 zu finden:

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

Siehe auch die Übersicht Bauen mit CMake.

Bauen mit qmake

Um das Modul für die Erstellung mit qmake zu konfigurieren, fügen Sie das Modul als Wert der Variable QT in der .pro-Datei des Projekts hinzu:

QT += concurrent

Beispiele

Entwicklung des Moduls

Änderungen an Qt Concurrent listet wichtige Änderungen an der Modul-API und -Funktionalität auf, die für die Qt 6-Serie von Qt vorgenommen wurden.

Lizenzen

Das Modul Qt Concurrent ist unter kommerziellen Lizenzen von The Qt Company erhältlich. Darüber hinaus ist es unter freien Software-Lizenzen verfügbar: Die GNU Lesser General Public License, Version 3, oder die GNU General Public License, Version 2. Siehe Qt-Lizenzierung für weitere Details.

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