このページでは

プロセス間通信

Qtは、同じシステム内または異なるシステム上で実行されている他のプロセスとの通信を、さまざまな方法でサポートしています。プロセス間通信のメカニズムには、基本的に以下の3種類があります:

  1. 同期プリミティブ
  2. 任意のバイトレベルのデータの交換
  3. 構造化メッセージの受け渡し

同期プリミティブ

Qt は、明示的なプロセス間同期のために 1 つのクラス(QSystemSemaphore )のみを提供しています。QSystemSemaphore は、同じシステム内の複数のプロセスからアクセス可能なQSemaphore のようなものです。これは「キー」によってグローバルに識別され、Qt ではQNativeIpcKey クラスによって表されます。 さらに、OSによっては、Qtがメモリ共有のための複数の異なるバックエンドをサポートしている場合があります。詳細および制限事項については、Native IPC Keysのドキュメントを参照してください。

プロセス間で共有されるメモリ上に配置された、ミューテックス、待機条件、読み書きロックなどの通常のスレッド同期プリミティブを使用することが可能です。Qt はこの機能をサポートするクラスを提供していませんが、アプリケーションは特定のオペレーティングシステム上で低レベルの操作を使用することができます。

QLockFile のような、あるいはシステム全体で一意のリソースを取得することによる、より高レベルのロックを提供するために、他のQtクラスを使用することもできます。このような手法には、TCP やUDP ポート、あるいはD-Bus にあるよく知られた名前などが含まれます。

バイトレベルのデータ共有

バイトレベルのデータを使用することで、アプリケーションは任意の通信プロトコルを実装できます。バイトデータの共有は、ストリーム指向(シリアル化)である場合もあれば、ランダムアクセスを許可する場合もあります(QFileDevice::isSequential()と同様の状態)。

シリアル通信については、Qtはさまざまなクラスや、さらには完全なモジュールまで提供しています:

同一システム内でのランダムアクセスによるデータ共有については、QtはQSharedMemory を提供しています。詳細については、共有メモリのドキュメントを参照してください。

構造化メッセージの受け渡し

Qt は、他のプロセスと構造化メッセージを交換するためのさまざまな手法も提供しています。アプリケーションは、上記のバイトレベルのソリューションを基盤として構築できます。たとえば、QJsonDocument を使用したり、HTTP 経由でQXmlStreamReader やQXmlStreamWriter を利用して、それぞれ JSONRPC や XMLRPC を実行したり、QtCoAP を使用してQCborValue を利用したりすることができます。

構造化メッセージおよびリモートプロシージャ呼び出し専用の 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.