QThreadStorage Class
template <typename T> class QThreadStorageDie Klasse QThreadStorage ermöglicht die Speicherung von Daten pro Thread. Mehr...
Kopfzeile: | #include <QThreadStorage> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QThreadStorage ist Teil der Threading-Klassen.
Hinweis: Alle Funktionen in dieser Klasse sind thread-sicher.
Öffentliche Funktionen
QThreadStorage() | |
~QThreadStorage() | |
bool | hasLocalData() const |
T & | localData() |
T | localData() const |
void | setLocalData(T data) |
Detaillierte Beschreibung
QThreadStorage ist eine Vorlagenklasse, die die Speicherung von Daten pro Thread ermöglicht.
Die Funktion setLocalData() speichert einen einzelnen thread-spezifischen Wert für den aufrufenden Thread. Auf die Daten kann später mit localData() zugegriffen werden.
Mit der Funktion hasLocalData() kann der Programmierer feststellen, ob die Daten zuvor mit der Funktion setLocalData() gesetzt wurden. Dies ist auch für eine träge Initialisierung nützlich.
Wenn T ein Zeigertyp ist, übernimmt QThreadStorage das Eigentum an den Daten (die mit new
auf dem Heap erstellt werden müssen) und löscht sie, wenn der Thread beendet wird, entweder normal oder durch Beenden.
Der folgende Code verwendet QThreadStorage zum Beispiel, um einen einzelnen Cache für jeden Thread zu speichern, der die Funktionen cacheObject() und removeFromCache() aufruft. Der Cache wird automatisch gelöscht, wenn der aufrufende Thread beendet wird.
QThreadStorage<QCache<QString, SomeClass> > caches; void cacheObject(const QString &key, SomeClass *object) { caches.localData().insert(key, object); } void removeFromCache(const QString &key) { if (!caches.hasLocalData()) return; caches.localData().remove(key); }
Warnungen
- Der QThreadStorage Destruktor löscht nicht die Daten eines einzelnen Threads. QThreadStorage löscht nur Daten pro Thread, wenn der Thread beendet wird oder wenn setLocalData() mehrfach aufgerufen wird.
- QThreadStorage kann verwendet werden um Daten für den
main()
Thread zu speichern. QThreadStorage löscht alle Daten, die für denmain()
Thread gesetzt wurden, wenn QApplication zerstört wird, unabhängig davon, ob dermain()
Thread tatsächlich beendet wurde oder nicht.
Siehe auch QThread.
Dokumentation der Mitgliedsfunktionen
QThreadStorage::QThreadStorage()
Konstruiert ein neues Datenspeicherobjekt pro Thread.
QThreadStorage::~QThreadStorage()
Löscht das Speicherobjekt für die Daten pro Thread.
Hinweis: Die pro Thread gespeicherten Daten werden nicht gelöscht. Alle in QThreadStorage verbliebenen Daten sind ausgelaufen. Stellen Sie sicher, dass alle Threads, die QThreadStorage verwenden, beendet sind, bevor Sie QThreadStorage löschen.
Siehe auch hasLocalData().
bool QThreadStorage::hasLocalData() const
Wenn T ein Zeigertyp ist, wird true
zurückgegeben, wenn der aufrufende Thread Daten ungleich Null zur Verfügung hat.
Wenn T ein Wertetyp ist, wird zurückgegeben, ob die Daten bereits durch den Aufruf von setLocalData oder localData konstruiert wurden.
Siehe auch localData().
T &QThreadStorage::localData()
Gibt einen Verweis auf die Daten zurück, die vom aufrufenden Thread gesetzt wurden.
Wenn keine Daten gesetzt wurden, wird eine standardmäßig konstruierte Instanz des Typs T erzeugt.
Siehe auch setLocalData() und hasLocalData().
T QThreadStorage::localData() const
Dies ist eine überladene Funktion.
Gibt eine Kopie der Daten zurück, die vom aufrufenden Thread gesetzt wurden.
Siehe auch hasLocalData().
void QThreadStorage::setLocalData(T data)
Setzt die lokalen Daten für den aufrufenden Thread auf data. Auf sie kann später mit den Funktionen localData() zugegriffen werden.
Wenn T ein Zeigertyp ist, übernimmt QThreadStorage das Eigentum an den Daten und löscht sie automatisch, wenn der Thread beendet wird (entweder normal oder durch Beendigung) oder wenn setLocalData() erneut aufgerufen wird.
Siehe auch localData() und hasLocalData().
© 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.