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 はテンプレートクラスであり、テンプレートパラメータT によって、スレッドごとに格納されるデータの型が指定されます。
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);
}注意点
- スレッドまたはプログラムのシャットダウン中に `hasLocalData()`、`localData()`、または `setLocalData()` を呼び出すと、現在のスレッド用のスレッドローカルストレージが再作成され、その後それを破棄する処理が何も残らない可能性があります。
- QThreadStorageのデストラクタは、スレッドごとのデータを削除しません。QThreadStorageは、スレッドが終了したとき、またはsetLocalData()が複数回呼び出されたときにのみ、スレッドごとのデータを削除します。
- QThreadStorage を使用すると、
main()スレッドのデータを格納できます。QApplication が破棄されると、main()スレッドが実際に終了したかどうかに関係なく、main()スレッドに設定されたすべてのデータが削除されます。
「QThread」も参照してください 。
メンバ関数のドキュメント
QThreadStorage::QThreadStorage()
スレッドごとの新しいデータ格納オブジェクトを作成します。
QThreadStorage::~QThreadStorage()
スレッドごとのデータ格納オブジェクトを破棄します。
注:スレッドごとに保存されたデータは削除されません。QThreadStorage に残されたデータはリークされます。QThreadStorage を削除する前に、QThreadStorage を使用しているすべてのスレッドが終了していることを確認してください。
hasLocalData()も参照してください 。
bool QThreadStorage::hasLocalData() const
T がポインタ型の場合、呼び出しスレッドに 0 以外のデータが利用可能なときは `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()も参照してください 。
© 2026 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.