Auf dieser Seite

Qt Concurrent

Das Modul „ Qt Concurrent “ stellt High-Level-APIs bereit, die es ermöglichen, Multithread-Programme zu schreiben, ohne auf Low-Level-Threading-Primitive wie Mutexe, Lese-/Schreibsperren, Wartebedingungen oder Semaphoren zurückgreifen zu müssen. Mit „ Qt Concurrent “ geschriebene Programme passen die Anzahl der verwendeten Threads automatisch an die Anzahl der verfügbaren Prozessorkerne an. Das bedeutet, dass heute geschriebene Anwendungen auch in Zukunft skalierbar bleiben, wenn sie auf Multi-Core-Systemen eingesetzt werden.

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

Qt Concurrent unterstützt mehrere STL-kompatible Container- und Iterator-Typen, funktioniert jedoch am besten mit Qt-Containern, die über Iteratoren mit wahlfreiem Zugriff verfügen, wie z. B. ` QList`. Die Funktionen `map` und `filter` akzeptieren sowohl Container als auch Start- und End-Iteratoren.

Übersicht über die STL-Iterator-Unterstützung:

Iterator-TypBeispielklassenUnterstützungsstatus
Eingabe-IteratorNicht unterstützt
Ausgabe-IteratorNicht unterstützt
Vorwärts-Iteratorstd::forward_listUnterstützt
Bidirektionaler Iteratorstd::listUnterstützt
Iterator mit wahlfreiem ZugriffQList, std::vectorUnterstützt und empfohlen

Iteratoren mit wahlfreiem Zugriff können in Fällen, in denen „ Qt Concurrent “ eine große Anzahl von leichtgewichtigen Elementen durchläuft, schneller sein, da sie das Springen zu einem beliebigen Punkt im Container ermöglichen. Darüber hinaus ermöglicht die Verwendung von Iteratoren mit wahlfreiem Zugriff es „ Qt Concurrent “, Fortschrittsinformationen über „ QFuture::progressValue()“ und „ QFutureWatcher::progressValueChanged()“ bereitzustellen.

Die Funktionen, die keine Änderungen an Ort und Stelle vornehmen, wie z. B. `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 Start- und End-Iteratoren des Containers anzugeben.

Verwendung des Moduls

Die Verwendung eines Qt-Moduls erfordert die 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.

Erstellen 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 „Erstellen mit CMake “.

Erstellen mit qmake

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

QT += concurrent

Beispiele

Modul-Entwicklung

Unter„Änderungen an Qt Concurrent “ sind wichtige Änderungen an der Modul-API und der Funktionalität aufgeführt, 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 Softwarelizenzen verfügbar: der GNU Lesser General Public License, Version 3, oder der GNU General Public License, Version 2. Weitere Informationen finden Sie unter „Qt-Lizenzierung “.

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