Класс QThreadStorage
Класс QThreadStorage предоставляет хранилище данных на основе потока. Подробнее...
| Заголовок: | #include <QThreadStorage> |
| 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-5.13/qthreadstorage.html