質問

ストリーミングデータ(9600ボー)をグラフ化する必要があります。これは、シリアルポートから2〜4バイトのパケットで受信されます。グラフ化する前にパケットを処理する必要があります。現在、完全なパケットごとにイベントを発生させているため、グラフ作成フォームで応答性の問題が発生しています。

この問題の最善の解決策はどれですか:

  • 一定の間隔(500ミリ秒)でイベントのデータをバッファリングし、バッファリングされたデータを生成します
  • バッファを構築し、インスタンス化するオブジェクトに、ポーリングされたときにバッファされたデータ/空のバッファをポーリングさせます
  • その他(?)
役に立ちましたか?

解決

間違いなく更新レートを制限します。そのようなアプリケーションでは、通常300msごとに1つで十分です。

それに基づいて、適切な実装は、シリアルポートを読み取り、バッファに追加するワーカースレッドになります。 UIスレッドはタイマーを使用してデータを照会し、表示を更新できます。

個別のスレッドを使用すると、ワーカースレッドはより高い優先度で実行できるため、負荷の急上昇により表示の更新が遅れることがありますが、データは失われません。

もう1つのトリックは、固定タイマーを使用せず、更新が完了した後にタイマーを再起動することです。したがって、更新にかなりの時間がかかる場合システムの負荷が高いため、更新の速度が低下し、負荷が効果的に削減されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top