0

C++ 標準または C++ 標準ライブラリによる Looper はどこでどのように入手できますか?

独自のコールバック システムを設計する必要があり、もちろん、キューとコンポーネントを管理するためにこれが必要です。

ルーパーは、与えられた周波数が 1 つの単純なことを行うものです。各クロックでキューを実行するだけです。10 ミリ秒のルーパーを設定すると、10 ミリ秒ごとにルーパーがキュー内のイベントを発生させます。

これは基本的にルーパーであり、ほとんどの場合、カーネル、ハードウェア クロック、または非常に低レベルなものに関連付けられています。

4

2 に答える 2

2

新しい C++11 標準のいくつかのプリミティブを使用して、そのようなものを作成できます。std::threadとを使用して、std::timed_mutexからのループ読み取りを制御しますstd::queue。ファンクター クラスをキューに入れます。スレッド ループ内からファンクターを実行します。

逆にファンクター オブジェクトをキューの「上方」に一定の頻度でプッシュし、「クライアント」側から実行することもできます。

どういうわけか、「ルーパー」スレッドからキューへの時間制御されたアクセスを持つようになります。これを行うためにegstd::thread::sleep_for()を使用するか、時間指定セマフォのように動作するより洗練されたメカニズム (たとえば、 と組み合わせた条件変数std::timed_mutex) を使用できます。

于 2012-10-06T13:04:18.277 に答える
1

QTimerは、「シングルショット」、またはあなたの場合のように、指定された (ミリ秒) の頻度で繰り返し起動します。

「ルーパー」よりも一般的な用語である可能性があるため、「watch-dog-timer」をグーグルで検索することもできます。

もっと低レベルに行きたい場合、一部のシステム (Windows など) には「システム クロック」(通常はミリ秒の解像度) と、「マルチメディア クロック」のような別の高性能クロック (通常はナノ秒の解像度) があります。 ) パフォーマンスが重要な場合。

[編集]わかりましたので、「what-is-a-looper」のビデオを見ました。これは、標準のイベント処理キューのように見えます。GUI イベントがキューに追加されたメッセージをトリガーし、「ルーパー」がメッセージ キューを定期的にクリア/実行します。特別なケースは、「ルーパー」が「ローカル サービス コール」も処理することです (Android では、ビデオのトピックでした)。したがって、次のものが必要なだけのようです。

  • メッセージ待ち行列
  • メッセージキューをクリアするタイマー (スレッド上、または「メイン処理」とは別)

ビデオは次のように述べています。

  • ビューは Looper メッセージを使用してイベントを発生させます
  • ルーパーはスレッドと1:1なのでビューツリーも
  • 作成したスレッドはビューに直接触れることはできません
  • ただし、独自のスレッド用に新しいルーパーを作成できます

興味深いですが、実装するのは特に難しいようには見えません。これはよく踏まれたパターンです。

したがって、この文脈では、私の提案はQTimer解決策の一部にすぎません。メッセージキューのライブラリを一緒に使用したいようです。

于 2012-10-06T12:52:44.700 に答える