我需要绘制流数据(9600 波特)的图表,该数据以 2-4 字节数据包形式从串行端口传入。在绘图之前需要对数据包进行处理。目前,我正在每个完整的数据包上引发一个事件,这会导致图形表单上的响应问题。

哪个是此问题的最佳解决方案:

  • 缓冲数据并以定时间隔(即 500 毫秒)在事件中引发缓冲数据
  • 构建缓冲区并让实例化对象在轮询时轮询缓冲数据/空缓冲区
  • 其他 (?)
有帮助吗?

解决方案

我肯定会限制更新率。对于此类应用,通常每 300 毫秒一次就足够了。

基于此,一个好的实现是一个读取串行端口并将其添加到缓冲区的工作线程。UI线程可以使用定时器来查询数据并更新显示。

使用单独的线程,工作线程可以以更高的优先级运行,因此负载峰值可能会延迟显示更新,但不会丢失数据。

另外一个技巧是不要使用固定计时器,而是在更新完成后重新启动计时器。因此,如果更新需要大量时间,例如由于系统负载较高,您的更新速度会减慢,从而有效减少负载。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top