Java SerialPortEventListener实现

Java SerialPortEventListener实现,java,serial-port,rxtx,firmata,Java,Serial Port,Rxtx,Firmata,我正在玩Firmata协议,它允许您通过串行协议控制Arduino。我正在使用SerialPortEventListener读取传感器值,侦听可用事件的数据。但我注意到,应用程序注册更新的传感器值需要一秒钟的时间,协议以57600的波特率运行。我的问题是,事件监听器是在一个单独的线程上运行,还是我的应用程序和监听器都在同一个线程中运行,而我的应用程序会降低运行速度 编辑:为了让我自己清楚,我只是在理论上问,在单独的线程中读取串行传输或使用事件侦听器会更快吗?我不得不猜测,没有看到你的应用程序;但

我正在玩Firmata协议,它允许您通过串行协议控制Arduino。我正在使用SerialPortEventListener读取传感器值,侦听可用事件的数据。但我注意到,应用程序注册更新的传感器值需要一秒钟的时间,协议以57600的波特率运行。我的问题是,事件监听器是在一个单独的线程上运行,还是我的应用程序和监听器都在同一个线程中运行,而我的应用程序会降低运行速度


编辑:为了让我自己清楚,我只是在理论上问,在单独的线程中读取串行传输或使用事件侦听器会更快吗?

我不得不猜测,没有看到你的应用程序;但是您是否可能试图在GUI中显示这些事件,并从事件调度线程以外的线程更新GUI


当您简单地执行
System.out.println()
时,延迟如何?

另一个猜测:当您获得可用的
数据时,您是否也获得了有关可用数据量的信息


您可能试图读取比缓冲区中更多的数据,并且在读取操作超时之前,您无法查看得到的数据。这表示超时设置为1秒。

对于所有这些答案,我感到抱歉,我正在认真考虑您的问题


除了从错误的线程更新GUI的问题外,线程的问题可能与此无关。由于从串行端口获取更新可能不会消耗大量的CPU电源(无论如何,除非使用紧密的轮询循环,否则不应该消耗大量的CPU电源),因此线程之间不会存在任何明显的CPU资源争用,因此线程之间不可能“相互减慢速度”我几乎不考虑这种可能性。但是你可以在TaskManager(Windows)或System Monitor(Linux)中查看你的CPU是否一直很忙;这可能会改变一切。

“对所有这些答案感到抱歉”:没问题:-)。你知道你可以编辑你现有的答案,不是吗?我当然希望如此!但这些都是不同的答案,所以我觉得它们应该以这种方式呈现。我知道提供多个答案是不寻常的,但系统允许它,所以我认为它必须是一个有效的事情,如果我认为它是合适的。