Spec-Zone.ru › Qt 5.6

Класс QThreadStorage

Класс QThreadStorage обеспечивает хранение данных по каждому потоку. Подробнее...

Заголовок: #include <QThreadStorage>
qmake: QT += core
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются потокобезопасными.

Публичные функции

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

Подробное описание

Класс QThreadStorage обеспечивает хранение данных по каждому потоку.

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/archives/qt-5.6/qthreadstorage.html

Spec-Zone.ru

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