Auf dieser Seite

QThreadStorage Class

template <typename T> class QThreadStorage

Die Klasse „QThreadStorage“ ermöglicht die Speicherung von Daten pro Thread. Mehr...

Header: #include <QThreadStorage>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Hinweis: Alle Funktionen dieser Klasse sind threadsicher.

Öffentliche Funktionen

QThreadStorage()
~QThreadStorage()
bool hasLocalData() const
T &localData()
T localData() const
void setLocalData(T data)

Ausführliche Beschreibung

QThreadStorage ist eine Template-Klasse, bei der der Template-Parameter T den Typ der pro Thread gespeicherten Daten angibt.

Die Funktion „ setLocalData()“ speichert einen einzelnen threadspezifischen Wert für den aufrufenden Thread. Auf die Daten kann später mit „ localData()“ zugegriffen werden.

Die Funktion ` hasLocalData()` ermöglicht es dem Programmierer festzustellen, ob Daten zuvor mit der Funktion ` setLocalData()` gesetzt wurden. Dies ist auch für die verzögerte Initialisierung nützlich.

Ist T ein Zeigertyp, übernimmt `QThreadStorage` die Verantwortung für die Daten (die mit ` new` auf dem Heap angelegt werden müssen) und löscht sie, wenn der Thread beendet wird – sei es normal oder durch Abbruch.

Der folgende Code verwendet beispielsweise `QThreadStorage`, um für jeden Thread, der die Funktionen `cacheObject()` und `removeFromCache()` aufruft, einen einzelnen Cache zu speichern. 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);
}

Einschränkungen

  • Der Aufruf von ` hasLocalData()`, ` localData()` oder ` setLocalData()` während des Beendens eines Threads oder des Programms kann dazu führen, dass der thread-lokale Speicher für den aktuellen Thread neu erstellt wird, ohne dass anschließend noch etwas vorhanden ist, um ihn zu löschen.
  • Der Destruktor von `QThreadStorage` löscht keine thread-spezifischen Daten. `QThreadStorage` löscht thread-spezifische Daten erst, wenn der Thread beendet wird oder wenn ` setLocalData()` mehrfach aufgerufen wird.
  • QThreadStorage kann verwendet werden, um Daten für den Thread ` main() ` zu speichern. QThreadStorage löscht alle für den Thread ` main() ` festgelegten Daten, wenn ` QApplication ` zerstört wird, unabhängig davon, ob der Thread ` main() ` tatsächlich beendet wurde oder nicht.

Siehe auch „ QThread “.

Dokumentation der Member-Funktionen

QThreadStorage::QThreadStorage()

Erstellt ein neues, pro Thread geltendes Datenspeicherobjekt.

QThreadStorage::~QThreadStorage()

Löscht das datenthread-spezifische Speicherobjekt.

Hinweis: Die pro Thread gespeicherten Daten werden nicht gelöscht. Alle in „ QThreadStorage “ verbleibenden Daten gehen verloren. Stellen Sie sicher, dass alle Threads, die „ QThreadStorage “ verwenden, beendet wurden, bevor Sie „ QThreadStorage “ löschen.

Siehe auch hasLocalData().

bool QThreadStorage::hasLocalData() const

Wenn T ein Zeigertyp ist, gibt die Funktion „ true “ zurück, sofern dem aufrufenden Thread Daten ungleich Null zur Verfügung stehen.

Ist T ein Werttyp, gibt die Funktion zurück, ob die Daten bereits durch den Aufruf von ` setLocalData ` oder ` localData` erstellt wurden.

Siehe auch ` localData()`.

T &QThreadStorage::localData()

Gibt eine Referenz auf die Daten zurück, die vom aufrufenden Thread festgelegt wurden.

Wenn keine Daten gesetzt wurden, wird eine standardmäßig konstruierte Instanz vom Typ T erstellt.

Siehe auch „ setLocalData()“ und „ hasLocalData()“.

T QThreadStorage::localData() const

Gibt eine Kopie der Daten zurück, die vom aufrufenden Thread gesetzt wurden.

Dies ist eine überladene Funktion.

Siehe auch „ hasLocalData()“.

void QThreadStorage::setLocalData(T data)

Setzt die lokalen Daten für den aufrufenden Thread auf „ data “. Der Zugriff darauf ist später über die Funktionen „ localData()“ möglich.

Wenn T ein Zeigertyp ist, übernimmt ` QThreadStorage ` die Verantwortung für die Daten und löscht sie automatisch, entweder beim Beenden des Threads (entweder normal oder durch Abbruch) oder wenn `setLocalData()` erneut aufgerufen wird.

Siehe auch „ localData()“ und „ hasLocalData()“.

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