QThreadStorage 类

template <typename T> class QThreadStorage

QThreadStorage 类提供了每线程的数据存储。 更多...

头文件 #include <QThreadStorage>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意: 此类中所有函数都是线程安全的。

公共函数

QThreadStorage()
~QThreadStorage()
boolhasLocalData() const
T &localData()
TlocalData() const
voidsetLocalData(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 是值类型,则返回数据是否已通过调用 setLocalDatalocalData 来构造。

参见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 公司的商标。所有其他商标均为其各自所有者的财产。