Spec-Zone.ru › Qt

Класс 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.2/qthreadstorage.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API