web-dev-qa-db-ja.com

単一のGUIからのマルチアプリケーション処理

私は非常に一般的な問題へのアプローチを探しています。最近のプライベートプロジェクトでは、単一のGUIからさまざまなアプリケーションを制御したいと考えています。

アイデアをより明確にするために、私のプロジェクトについて少し説明します。さまざまな設定と機能を備えた拡張現実プログラムを作成したいと思います。ビデオはウェブカメラで録画され、ARのグラフィック評価はゲームエンジン(Unrealなど)でプログラムされます。 ARの単一の機能を起動またはシャットダウンできるプログラム用の単一のGUIが必要です。

これはどのように達成できますか?

2
shup

あなたが考えているのは プラグイン アーキテクチャだと思います。たとえば、ChromeやChrome拡張機能です。

アイデアは、既知の場所にいくつかのパッケージ化されたモジュールを期待するメインプログラムがあり、このパッケージは、メインプログラムが実行時にそれを使用できるように、いくつかのインターフェイス/プロトコルに準拠することがわかっているということです。

メインプログラムの起動時にプラグインをスキャンして、検出されたプラグインをユーザーに表示し、ユーザーが選択したプラグインを有効/無効にすることができます。

プラットフォームが指定されていないため、具体的にするのは難しいです。これをある種のリファレンスとして見ることができます Androidの例 ですが、一般的なプラットフォーム用のプラグイン可能なアーキテクチャリファレンスのタイプを見つけることができるはずです。

3
Rafi Goldfarb

拡張現実システムに必要な基本モデルは、イベントベースのアーキテクチャのようです。

  • さまざまなアプリケーションがイベントに反応したり、イベントをトリガーしたりします。たとえば、ビデオフレームを提供したり、加速度計に基づいて位置と動きを計算したりして、レンダリングするオブジェクトを提供/更新します。
  • GUIアプリケーションは、表示に関連するすべてのイベントを統合し、イベントを送信して、back-ebndアプリケーションのユーザーコマンドを変換します。

この記事 このようなアーキテクチャの基本原則を説明し、イベント処理スタイルを特定します。

  • あなたの場合、単純なイベント処理を忘れることができると思います。
  • ビデオストリームと3Dレンダリングストリームをマージするため、ストリームイベント処理に直接移動します
  • さまざまなストリームを調整し、それらを相互に関連付けるために、複合イベント処理(CEP)が必要になる場合もあります(つまり、レンダリングされる3Dオブジェクトの位置に影響を与えるために、ビデオをムーブメントキャプターと相関させます。

このようなイベントベースのアーキテクチャを実装するための実用的な手法はすべて、メッセージベースのシステム、共有メモリ、ソケットベースなどの何らかのメカニズムを含みます [〜#〜] ipc [〜#〜] hocプロトコルまたは標準化されたWebサービスプロトコル)。選択は、OSとパフォーマンスの制約によって異なります。

しかし、1つの疑問が残ります。本当に異なるアプリケーションが必要ですか?そうでない場合は、マルチスレッドアプリケーションを検討する必要があります。これにより、非常に低いレイテンシでデータの共有が容易になり、CPUを最大限に活用できます。コンピューティングを多用する拡張現実モデルの場合、これは本当に興味深い代替手段になる可能性があります。もちろん、このアプローチは、Rafiが言及したプラグインアプローチと互換性があります。

1
Christophe