0

私は、シリアルプロトコルを介してArduinoを制御できるFirmataプロトコルで遊んでいます。DATA_AVAILABLEイベントをリッスンしているSerialPortEventListenerを使用してセンサー値を読み取っています。しかし、更新されたセンサー値がアプリケーションによって登録されるまでに1秒かかる多くの遅延に気付きました。プロトコルは、57600のボーレートで実行されます。私の質問は、イベントリスナーが別のスレッドで実行されるのか、それともアプリケーションとリスナーは同じスレッドで実行され、私のアプリケーションは物事を遅くします。

編集:私の自己を明確にするために、私は理論的には別のスレッドでシリアル送信を読み取るか、イベントリスナーを使用する方が速いかどうかを尋ねていますか?

4

3 に答える 3

1

これらすべての回答について申し訳ありません。私はあなたの問題について一生懸命考えています。

間違ったスレッドから GUI を更新する問題は別として、スレッドの問題はおそらくあまり関係ありません。シリアル ポートから更新を取得しても、おそらく多くの CPU パワーを消費することはないので (いずれにせよ、タイトなポーリング ループで実行しない限り、そうすべきではありません)、スレッド間で CPU リソースの顕著な競合が発生することはありません。そのため、スレッドが「互いに速度を落としている」可能性はありません。私はこの可能性をかなり割り引いています。ただし、タスク マネージャー (Windows) またはシステム モニター (Linux) を調べて、CPU が本当にビジー状態に保たれているかどうかを確認できます。それは物事を変えるかもしれません。

于 2010-01-06T13:24:39.383 に答える
0

あなたのアプリを見ずに推測する必要があります。しかし、これらのイベントを GUI に表示しようとしていて、イベント ディスパッチ スレッド以外のスレッドから GUI を更新しようとしている可能性はありますか?

単純に実行したときのレイテンシはどうSystem.out.println()ですか?

于 2010-01-06T13:19:39.703 に答える
0

別の推測:DATA_AVAILABLEイベントを取得するときに、利用可能なデータ量に関する情報も取得しますか?

バッファ内よりも多くのデータを読み込もうとしている可能性があり、読み取り操作がタイムアウトするまで取得したデータを確認できません。これは、タイムアウトが 1 秒に設定されていることを示します。

于 2010-01-06T13:21:19.327 に答える