QThreadStorage Class
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 析构函数不会删除每个线程的数据。QThreadStorage 只会在线程退出或多次调用setLocalData() 时删除每个线程的数据。
- QThreadStorage 可用于存储
main()
线程的数据。当QApplication 销毁时,QThreadStorage 会删除为main()
线程设置的所有数据,无论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()。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.