Spec-Zone.ru › Qt 6.0

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

Spec-Zone.ru

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