我将编写一个程序,该程序可以绘制与计算机连接的传感器的数据。传感器值将作为时间函数绘制(传感器值在y轴上,时间在x轴上)。我希望能够实时向图表添加新值。在C++中,最好用什么来实现这个功能?
编辑:顺便说一下,该程序将在Linux机器上运行。
编辑:顺便说一下,该程序将在Linux机器上运行。
编写一个函数,可以以您喜欢的方式绘制std :: deque
,然后在传感器可用时将值.push_back()
到队列中,并从队列中.pop_front()
值,如果它变得太长以进行良好的绘图。
您的绘图函数的确切性质取决于您的平台、需求、审美感等。
std::queue
,所以你可能想直接使用std::deque
;你仍然可以使用双端队列进行push_back
和pop_front
。 - James McNellis你可以使用环形缓冲区。在这样的缓冲区中,您有读取位置和写入位置。这样,一个线程可以向缓冲区写入数据,另一个线程可以读取并绘制图形。为了提高效率,通常需要编写自己的框架。
可以通过以下方式估算这种缓冲区的大小:传感器的数据传输速度(40KHz?),一个探头的大小以及您想要保留用于绘图目的的时间跨度。
这还取决于您是否希望存储此类数据未压缩,存储渲染后的图形以供进一步离线分析。在非RTOS环境中,您的“实时”取决于处理速度:您检索/存储/处理和绘制数据的速度有多快。通常它是接近实时效率的。
我假设你会在一个实时操作系统上部署这个应用程序。但是,数据速率是多少?有什么实时要求呢!因此,如上所述,一个简单的解决方案可能就足够了。但是,如果你有强实时约束,一切都会变得截然不同。一个带有数据管道的多线程设计可以解决你的实时问题。