gpt4 book ai didi

c - 用于数据采集和绘图的单独线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:56 25 4
gpt4 key购买 nike

我有一个用 C 编写并在 Linux 上运行的程序,它每 16 毫秒左右从串行端口设备获取流数据。这是一段时间关键的代码,运行良好。另一段代码绘制了这些数据,也是实时的,但它的及时执行对我来说不如数据采集部分重要。也就是说,我不想等到所有的绘图和绘图功能都完成后才再次轮询串口。所以我在考虑让一个单独的线程来完成应用程序的绘图部分,或者让数据采集部分成为单独的线程。在低级编程方面我真的几乎没有经验,所以有人可以指出我正确的方向吗?我正在使用的伪代码看起来像这样:

int xyz; // global variable

int main() {

do_some_preliminary_stuff();

while 1 {
poll_serial_port_and_fill_xyz_with_new_position_and_repeat();
}

while 1 {
plot_xyz();
}

return 0;
}

显然如所写,代码将卡在第一个 while 循环中,所以是的,线程?

谢谢。

最佳答案

保重!您的绘图例程能否平均跟上数据到达串行端口的速率?如果不是,xyz 应该怎么办?应该覆盖未绘制的值还是其他?如果你跟不上,需要先回答这个问题。

如果你能跟上平均水平,那么正如你所说的你在低级(即线程)编程方面经验不足,你可以考虑使用通过 shell 管道连接的两个进程:

poll_for_serial_data | plot_data

第一个过程是您的 while 循环,以某种方便的格式将轮询数据写入标准输出。第二个进程从 stdin 读取 dat 并绘制它。这实现了与多线程方法相同的目的,但由于操作系统会为您处理同步和保护问题,因此编写起来更简单、更容易。在 Linux 上它非常高效。

如果这对您来说性能不够好,它仍然可以作为多线程版本的模型。

关于c - 用于数据采集和绘图的单独线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7817972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com