0

フローをフォークするためのステートメントで何度も繰り返される本当に不快なサイクルを書くことなく、シグナルとシグナルとメソッド間の接続を処理するための強固なフレームワークを提供できるシステムを設計する方法を知りたいですアプリケーションの。

つまり、Qtなどのシグナルスロットメカニズムの背後にある理論を知りたいのです。

私は特別な理由なしにQtに名前を付けています。これはおそらく、このために最も使用され、十分にテストされたライブラリの1つであるため、C ++の世界でのリファレンスですが、このメカニズムの設計に関するアイデアはどれも良いでしょう。

ありがとう。

4

2 に答える 2

1

高レベルでは、Qtのシグナル/スロットとブーストのシグナルライブラリはオブザーバーパターンのように機能します(オブザーバー基本クラスの必要性を回避するだけです)。

各「信号」は、どの「スロット」がそれを監視しているかを追跡し、信号が発信されるときにそれらすべてを繰り返します。

これを具体的に実装する方法については、C++はウィキペディアの記事のJavaコードと非常によく似ています。すべてのオブザーバーにインターフェースを使用しないようにする場合、boostはテンプレートを使用し、Qtはマクロと特別なプリコンパイラー(mocと呼ばれる)を使用します。

于 2012-12-13T05:29:30.117 に答える
1

あなたはすべてを求めているようですが、損失はありません。

「キーが押されている」、「タッチイベント」、「オブジェクトが自身の状態を変更する」など、非同期入力と変更を処理するために私が知っている一般的な概念がいくつかあります。

これらの概念とメカニズムのほとんどは、あらゆる種類のプログラムフローに役立ち、プロセス、スレッドなど、多くの境界を越えることができます。これは最も網羅的なリストではありませんが、私が遭遇したものの多くをカバーしています。

  • ステートマシン
  • スレッド
  • メッセージ
  • イベントループ
  • 信号とスロット
  • ポーリング
  • タイマー
  • コールバック関数
  • フック入力
  • パイプ
  • ソケット

ウィキペディア、Qtドキュメント、またはC ++の本でこれらを調べて、フレームワークで何が機能するか、またはどのメカニズムを使用するかを確認することをお勧めします。

もう1つの本当に良いアイデアは、Linuxのソースや、Windows APIを使用してフレームワークでこの種の情報にアクセスする方法など、プログラミングアーキテクトが過去にどのようにそれを行ったかを調べることです。

お役に立てば幸いです。

編集:質問へのコメント/追加への応答

着信座標のバッファ/キューを管理し、最新の座標のアクセサを用意します。次に、タッチ/タップ/ドラッグの開始や終了などのイベントを追跡し、ロングタッチが実行されたときのタイマーと、ドラッグされたタッチが実行されたときの最小変化測定を行います。 。

これを1つのプログラムだけで使用している場合は、使用しているものと同様のインターフェイスを作成しようとします。この種の入力にOpenSoundControlが使用されていると聞いたことがあります。座標を収集し、イベントを追跡するスレッドを設定しました。次に、それを使用する必要のあるプログラム/クラスでその情報をポーリングします。

于 2012-12-11T19:38:05.140 に答える