2

QStackedWIdget に複数のフォームがある GUI を作成しています。これらのフォームのデータが利用可能になったときに更新する必要があります。データは RTI DDS を介して受信されます。GUIデータが非GUIスレッドから更新される例やリンクをいくつか提案してもらえますか。

ありがとうございました。

4

1 に答える 1

2

自由に使えるオプションがいくつかあります。あなたの質問から判断できる限り、あなたの状況に最も適していると思われるものを説明します.

まず、サブスクライバー側では、アプリケーションと DDS DataReader の間で、ポーリング、リスナー、ウェイトセットの 3 種類の対話が可能であることを知っておく必要があります。ポーリングとは基本的に、アプリケーションが必要と判断したときに、たとえば固定レートで DataReader にクエリを実行することを意味します。リスナーを使用するということは、新しいデータが到着するたびに呼び出されるいくつかのコールバック関数をアプリケーションがミドルウェアに提供することを意味します。ウェイトセットはソケットselectに似ており、データが到着するかタイムアウトが発生するまでアプリケーション スレッドがブロックされます。通常、その後に DataReader にアクセスするアクションが続きます。

GUI アプリケーションの場合、おそらく使用しているリスナー アプローチとは対照的に、ポーリング メカニズムを使用するのが一般的です。到着したデータを読み取ってすぐに GUI ウィジェットを更新する代わりに、GUI に DataReader からのデータを固定レート (5 Hz など) で読み取らせたり取得させたりすることができます。

このアプローチを使用すると、DDS にアクセスするタイミングを制御でき、DataReader 内でデータが更新される速度に関係なく、必要な正確な速度でアクセスできます。さらに、独自のコンテキストから DDS DataReader にアクセスするため、非 GUI スレッドによってデータが更新されるという問題が解決されます。

ポーリングを使用する場合の潜在的な欠点は、ウィジェットの更新に多少の遅延が発生することです。たとえば、5 Hz でポーリングすると、最大の追加遅延は 200 ミリ秒になります。ただし、これは通常、GUI アプリケーションでは問題になりません。

于 2013-07-25T01:57:33.967 に答える