5

簡単なメッセージバスを実装する必要があります。

  • したがって、1つのプロセスだけでD-Busを実行する必要はありません。
  • 型指定されたイベントのパブリッシュ/サブスクライブ(QObjectsの場合もあります)

QSignalMapperを使用して「名前付きイベント」にタグを付けてから、スロットから再送信するか、パブリッシャーのシグナルをサブスクライバーのシグナルに接続することを考えていました...

何か提案はありますか?それとも、比較的シンプルなデザインパターンを選ぶべきですか?

PS:Windows上のD-BusのAFAICSは、Qtで動作させるために「サードパーティ」ソフトウェアをインストールする必要があります。

4

2 に答える 2

3

専用の QObject サブクラスを 1 つだけメッセージ バスとして使用しないのはなぜですか? そこで、メッセージ バスを介して交換される可能性のあるすべてのシグナルを定義し、これらのシグナルを発行する対応する通知メソッドを提供します。これで、「メッセージ」を受信したいすべてのコンポーネントが対象の信号に接続できるようになりました。

より一般的な方法が必要な場合は、以前と同じアプローチを使用してください。ただし、(シングルトン) QObject サブクラスには、"message(QByteArray)" シグナルと、このシグナルを発信する "sendMessage(QByteArray)" パブリック メソッドしかありません。送信メソッドに別のシグナルを接続したい場合に備えて、送信メッセージ メソッドもスロットとして宣言することができます。

私はこれらのアプローチを自分で使用しており、完全に正常に機能します。異なるスレッドでも、このメカニズムを使用して問題なく相互に通信できます。QByteArray アプローチを使用すると、DBus に似たものが得られます。メッセージをシリアル化および逆シリアル化し、すべてのメッセージ受信者がメッセージの独自のコピーを自動的に取得するようにします。並列計算を行う場合に得られるすべての利点があります。

于 2011-08-05T22:21:06.593 に答える