このページについて

Qt Concurrent

Qt Concurrent モジュールは、ミューテックス、読み書きロック、待機条件、セマフォといった低レベルのスレッド処理プリミティブを使用せずに、マルチスレッドプログラムを記述できるようにする高レベルなAPIを提供します。Qt Concurrent を使用して作成されたプログラムは、利用可能なプロセッサコアの数に応じて、使用されるスレッド数を自動的に調整します。つまり、今日作成されたアプリケーションは、将来マルチコアシステムに展開された際にも、引き続きスケーラビリティを維持します。

Qt Concurrent には、並列リスト処理のための関数型プログラミングスタイルのAPIが含まれており、共有メモリ(非分散)システム向けのMapReduceおよびFilterReduceの実装や、GUIアプリケーションにおける非同期計算を管理するためのクラスなどが含まれます:

Qt Concurrent は、いくつかのSTL互換のコンテナおよびイテレータ型をサポートしていますが、QList のようなランダムアクセスイテレータを持つQtコンテナで最適に動作します。mapおよびfilter関数は、コンテナとbegin/endイテレータの両方を引数として受け付けます。

STL イテレータのサポート概要:

イテレータ型例となるクラスサポート状況
入力イテレータ未対応
出力イテレータ未対応
フォワード・イテレータstd::forward_listサポートされています
双方向イテレータstd::listサポートされています双方向イテレータサポートされている
ランダムアクセスイテレータQList、std::vectorサポートされており、推奨

ランダムアクセスイテレータは、Qt Concurrent が大量の軽量な項目を反復処理する場合、コンテナ内の任意の地点へスキップできるため、処理が高速になることがあります。さらに、ランダムアクセスイテレータを使用することで、Qt Concurrent はQFuture::progressValue()およびQFutureWatcher::progressValueChanged()を通じて進行状況情報を提供できるようになります。

mapped() や filtered() などの非インプレース変更関数は、呼び出された際にコンテナのコピーを作成します。STL コンテナを使用している場合、このコピー操作に時間がかかる可能性があります。その場合は、代わりにコンテナの開始イテレータと終了イテレータを指定することをお勧めします。

モジュールの使用

Qtモジュールを使用するには、直接または他の依存関係を通じて、モジュールライブラリに対してリンクを行う必要があります。CMakeやqmakeなど、いくつかのビルドツールでは、このための専用のサポートが用意されています。

CMake を使用したビルド

find_package() コマンドを使用して、Qt6 パッケージ内の必要なモジュールコンポーネントを指定します。

find_package(Qt6 REQUIRED COMPONENTS Concurrent)
target_link_libraries(mytarget PRIVATE Qt6::Concurrent)

「CMake によるビルド」の概要も参照してください。

qmake を使用したビルド

qmake を使用してモジュールをビルドするように設定するには、プロジェクトの .pro ファイル内で、QT 変数の値としてモジュールを追加します:

QT += concurrent

例

モジュールの進化

「Qt Concurrent 」の変更点には、Qt 6シリーズ向けに実施されたモジュールのAPIおよび機能に関する重要な変更が記載されています。

ライセンス

Qt Concurrent モジュールは、The Qt Companyから商用ライセンスの下で提供されています。さらに、フリーソフトウェアライセンス(GNU Lesser General Public License バージョン3、またはGNU General Public License バージョン2)の下でも利用可能です。詳細については、「Qtのライセンス」を参照してください。

© 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.