Класс 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