QThreadStorage Class

template <typename T> class QThreadStorage

QThreadStorage クラスは、スレッドごとのデータ・ストレージを提供します。詳細...

ヘッダ #include <QThreadStorage>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
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() 関数は、呼び出したスレッドに固有の値を 1 つ保存します。このデータは、後でlocalData() を使用してアクセスできます。

hasLocalData ()関数を使用すると、setLocalData ()関数を使用してデータが以前に設定されているかどうかをプログラマが判断できるようになります。これは、遅延初期化にも便利である。

T がポインタ型の場合、QThreadStorage はデータ(new を使用してヒープ上に作成する必要があります)の所有権を取得し、スレッドが通常または終了によって終了するときに削除します。

例えば、以下のコードでは、QThreadStorage を使用して、cacheObject() 関数と removeFromCache() 関数を呼び出す各スレッドに 1 つのキャッシュを格納しています。呼び出し元のスレッドが終了すると、キャッシュは自動的に削除されます。

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 は、QApplication が破棄されると、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.