QThreadStorage 类
template <typename T> class QThreadStorageQThreadStorage 类提供了每线程的数据存储。 更多...
头文件 | #include <QThreadStorage> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
- 所有成员的列表,包括继承的成员
- QThreadStorage 是 线程类 的一部分。
注意: 此类中所有函数都是线程安全的。
公共函数
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 析构函数不会删除每线程数据。只有当线程退出或当 setLocalData() 调用多次时,QThreadStorage 才会删除每线程数据。
- QThreadStorage 可以用于存储
main()
线程的数据。当 QApplication 销毁时,无论main()
线程是否已经完成,QThreadStorage 将删除为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().
© 2024 Qt 公司 Ltd. 本文档的贡献者是各自版权的所有者。本指南受 GNU 自由文档许可证版本 1.3 的条款约束,该许可证由自由软件基金会发布。Qt 及相关徽标是芬兰和/或全球其他地区的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。