QThreadStorage Class

template <typename T> class QThreadStorage

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

Header: #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()も参照のこと

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。