単一のエミッター オブジェクトと一連のレシーバーがある状況があります。レシーバーは同じクラスであり、実際には同じタイプのデバイスのセットを表します。Qt フレームワークを使用しています。
エミッタ自体は、最初にデバイスの 1 つから情報を要求する信号を取得します。
対応するスロットで、エミッターはどのレシーバーが「準備ができている」かを確認し、独自の信号を送信してデバイスの 1 つ (最初に準備ができている方) にデータを要求する必要があります。
Emitter はミリ秒単位で非常に高速に信号を受信します。デバイスの 1 つだけから安全にデータを要求する方法を 3 つ考えることができます (デバイスは独自のスレッドに存在するため、スレッドセーフなメカニズムが必要です)。デバイスの数は静的ではなく、変更される可能性があります。デバイスの総数は非常に少ないです (間違いなく 5 ~ 6 未満)。
1) 追加または削除されたすべてのデバイスに接続します。1 つの要求を発行し、デバイス オブジェクト自体に、特定のデバイス タグを使用して、その要求がそれらに対するものであるかどうかをフィルター処理します。チェックが行われる要求スロットは専用スレッドのコンテキストで実行されるため、この方法は便利ですが、デバイスの数が増えると無駄になります。
2) リクエストを送信する必要がある場合、オンザフライでエミッタ内のオブジェクトに接続および切断します。
3) リクエストを送信する必要がある場合は、QMetaObject::invokeMethod() を使用します。
パフォーマンスは重要です。どの方法が「最良」であるか、またはより良い方法があるかどうかを知っている人はいますか?
よろしく
プリス
注: 明確にするために: エミッターはアプリケーションから信号を取得し、デバイスにクエリを実行して情報を取得します。クレイジー ASCII アート ゴー:
(アプリ)<---->(エミッター)<------>(レシーバー)<--|-->物理デバイス