Класс QThreadStorage
шаблон <typename T> класс QThreadStorageКласс QThreadStorage предоставляет хранилище данных на уровне потоков. Подробнее...
| Заголовок: | #include <QThreadStorage> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются потокобезопасными.
Открытые функции
| QThreadStorage() | |
| ~QThreadStorage() | |
| bool | hasLocalData() const |
| T & | localData() |
| T | localData() const |
| void | setLocalData(T data) |
Подробное описание
QThreadStorage — шаблонный класс, предоставляющий хранение данных на уровне потоков.
Функция setLocalData() сохраняет единственное значение, специфичное для потока, для вызывающего потока. К данным можно получить доступ позже с помощью localData().
Функция hasLocalData() позволяет программисту определить, были ли данные ранее установлены с помощью функции setLocalData(). Это также полезно для ленивой инициализации.
Если T — тип указателя, QThreadStorage принимает владение данными (которые должны быть созданы в куче с new) и удаляет их при завершении потока, как нормальным, так и путем завершения.
Например, следующий код использует QThreadStorage для хранения одного кэша для каждого потока, который вызывает функции cacheObject() и removeFromCache(). Кэш автоматически удаляется при завершении вызывающего потока.
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);
} Ограничения
- Деструктор QThreadStorage не удаляет данные на уровне потоков. QThreadStorage удаляет данные на уровне потоков только при завершении потока или при повторном вызове setLocalData().
- QThreadStorage может использоваться для хранения данных для потока
main(). QThreadStorage удаляет все данные, установленные для потокаmain(), при уничтожении QApplication, независимо от того, завершился ли потокmain()фактически.
См. также QThread.
Документация по функциям-членам
QThreadStorage::QThreadStorage()
Конструирует новый объект хранилища данных на уровне потоков.
QThreadStorage::~QThreadStorage()
Уничтожает объект хранилища данных на уровне потоков.
Примечание: данные на уровне потока не удаляются. Любые данные, оставшиеся в QThreadStorage, будут потеряны. Убедитесь, что все потоки, использующие QThreadStorage, завершились, прежде чем удалять QThreadStorage.
См. также hasLocalData().
bool QThreadStorage::hasLocalData() const
Если T — тип указателя, возвращает true, если у вызывающего потока есть доступные данные, отличные от нуля.
Если T — тип значения, возвращает, были ли данные уже созданы путем вызова setLocalData или localData.
См. также localData().
T &QThreadStorage::localData()
Возвращает ссылку на данные, которые были установлены вызывающим потоком.
Если данные не были установлены, будет создан экземпляр типа T с конструктором по умолчанию.
См. также setLocalData() и hasLocalData().
T QThreadStorage::localData() const
Это перегруженная функция.
Возвращает копию данных, которые были установлены вызывающим потоком.
См. также hasLocalData().
void QThreadStorage::setLocalData(T data)
Устанавливает локальные данные для вызывающего потока в data. К ним можно получить доступ позже с помощью функций localData().
Если T — тип указателя, QThreadStorage принимает владение данными и удаляет их автоматически, либо при завершении потока (нормально или по завершению) либо при повторном вызове setLocalData().
См. также localData() и hasLocalData().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qthreadstorage.html