プロセス間通信

Qt は、同じシステムや異なるシステムで動作している他のプロセスと通信するための様々な方法をサポートしています。プロセス間通信には、基本的に3つの種類があります:

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

同期プリミティブ

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

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

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

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

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

シリアル通信のために、Qt は様々なクラスと完全なモジュールを提供しています:

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

構造化メッセージパッシング

Qt は、他のプロセスと構造化されたメッセージを交換する技術も提供しています。例えば、QJsonDocumentQXmlStreamReader /QXmlStreamWriter over HTTP を使って JSONRPC や XMLRPC を実行したり、QCborValue を QtCoAP と一緒に実行したりすることができます。

構造化メッセージとリモートプロシージャコール専用の Qt モジュールには、次のようなものがあります:

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