我正在使用Firmata协议,它允许您通过串行协议控制Arduino。我正在使用SerialPortEventListener监听DATA_AVAILABLE事件来读取传感器值。但我注意到我的应用程序注册更新的传感器值需要一秒钟的延迟,协议以57600的波特率运行。我的问题是事件监听器是在单独的线程上运行还是同时执行我的应用程序和监听器在同一个线程中运行,我的应用程序放慢了速度。
编辑:为了让自己清楚,我只是在理论上问,在单独的线程中读取串行传输或使用事件监听器会更快吗?
答案 0 :(得分:1)
对所有这些答案感到抱歉,我正在考虑你的问题。
除了从错误的线程更新GUI的问题之外,线程问题可能非常无关紧要。由于从串口获取更新可能不会消耗大量的CPU能力(不管怎么说,除非用紧密的轮询循环完成),否则线程之间不会有明显的CPU资源争用,所以线程不应该“相互减速”。我几乎打破了这种可能性。但是你可以查看TaskManager(Windows)或系统监视器(Linux)来查看你的CPU是否真的很忙;这可能会改变一切。
答案 1 :(得分:0)
没有看到你的应用程序,我必须猜测;但您是否有可能尝试在GUI中显示这些事件,并从事件调度线程以外的线程更新GUI?
只需执行System.out.println()
时的延迟时间如何?
答案 2 :(得分:0)
另一个猜测:当您收到DATA_AVAILABLE
事件时,您是否也获得了有关可用数据量的一些信息?
您可能正在尝试读取比缓冲区中更多的数据,并且在读取操作超时之前,您无法查看所获得的数据。这表示超时设置为1秒。