【问题标题】:Reading from serial but only take the newest data从串行读取但只获取最新数据
【发布时间】:2014-09-28 07:01:55
【问题描述】:

我有一个向我的计算机发送传感器数据的设备。我正在用 C++ 编写一个程序来读取数据并处理它。但是假设我的 C++ 程序有很多工作要做,所以当它有时间读取数据时,设备可能已经通过串行端口发送了几十个读数。

如果我只是逐行读取数据,我的程序似乎会得到滞后响应,因为它正在获取未处理的旧数据。我不确定处理这个问题的最佳方法是什么。

  1. 我可以继续阅读,直到读到最后一行数据。但是哪个库有返回是否还有数据要读取的函数,这样我就可以判断我是否正在读取最后一个?

  2. 或者是否有一些功能可以只清理 FIFO 缓冲区并等待新数据?我可以使用哪个库?

【问题讨论】:

  • ooo 多项选择。 #2!
  • 有没有这个功能的库?
  • 大部分都应该。它只是冲洗。
  • 使用 selectpoll 或更高级别的库,例如封装它们的 libevent。参见例如tldp.org/HOWTO/text/Serial-Programming-HOWTO
  • 另一种方法(实际上可能更可取)是运行单独的读取器线程并使其仅公开最后读取的记录。

标签: c++ serial-port


【解决方案1】:

Boost ASIO 是一个很好的库,应该可以满足您的要求。查看read_until的文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2015-02-25
    • 2016-03-04
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多