SerialPortEventListener実装
-
19-09-2019 - |
質問
私はあなたがシリアルプロトコルを介してのArduinoを制御することができますFirmataプロトコルで遊んでいます。私はDATA_AVAILABLEイベントを受け取るSerialPortEventListenerを用いたセンサ値を読んでいます。しかし、私はそれは私のアプリケーションで登録する更新センサ値について秒かかり、待ち時間の多くを気づく、プロトコルが57600私の質問のボーレートで実行されるイベントリスナーは、別のスレッドで実行するんですか、ないの両方私のアプリケーションとリスナーと同じスレッドで実行し、自分のアプリケーション遅くなってしまいます。
編集:私の自己を明確にするために、私はちょうど別のスレッドでシリアル伝送を読むために速くなるか、イベントリスナーを使用してしまう理論的に求めています。
?解決
これらすべての回答について申し訳ありませんが、私はあなたの問題についてハード考えています。
別に間違ったスレッドからあなたのGUIを更新する問題から、スレッドの問題は、おそらくかなり無関係です。あなたのスレッド間でCPUリソースの顕著な競合は存在しません(それはタイトなポーリングループで行うのない限り、とにかく、それはいけない)、おそらく多くのCPUパワーを消費しないシリアルポートからアップデートを取得し、以来、そのスレッドがされるために何の可能性があってはならない「お互いを減速。」私はこの可能性はかなりの割引をしたいです。しかし、あなたはあなたのCPUが本当に忙しくされているかどうかを確認するためにタスクマネージャ(Windows)またはシステムモニタ(Linux)の中で見ることができます。それは、物事が変更される場合があります。
他のヒント
あなたのアプリを見ることなく私が推測する必要が。それはあなたがGUIでこれらのイベントを表示しようとすると、イベントディスパッチスレッド以外のスレッドからGUIを更新している?
可能ですどのようにあなたは、単にSystem.out.println()
んレイテンシーだ?
もう一つの推測:?あなたはDATA_AVAILABLE
イベントを取得すると、あなたも可能ですどのくらいのデータに関するいくつかの情報を得るのです。
あなたは、バッファ内にあるよりも多くのデータを読み取ろうとすることができ、あなたがあなたの読み取り操作がタイムアウトになるまで得たものを見ることはありません。これは、タイムアウトが1秒に設定されていることを示します。