如何在 C++ 中处理完整的 CircularBuffer

How to handle a full CircularBuffer in C++

这是一个一般性问题,我是 C++ 的新手,我正在玩一个项目,该项目以 1 毫秒的间隔从工作线程中的 serial/usb 端口读取数据到循环缓冲区中,我还有另一个GUI UI 线程,每 100 毫秒抓取一次数据。当数据备份并且数据缓冲区变满时会发生什么,我不想阻塞,我需要获取数据,因为它不需要等待。这种情况下的常见做法是什么?我是为 "extras" 创建另一个缓冲区,还是让原始缓冲区更大?

谢谢

您可以使用循环缓冲区,在缓冲区满时分配更多内存。

如果您对创建自己的循环缓冲区不感兴趣,可以使用boost's one,或者将其作为参考。

我会把它放在评论中,但因为我不能:你不能调整缓冲区大小有什么原因吗?

如果不是,我看不出有任何理由不应该使用缓冲区来为您提供一些安全空间,毕竟这就是缓冲区的用途。

说白了,你完蛋了

现在,让我们看看事情有多糟糕,有多种方法可以处理缓冲区溢出:

  1. 删除一些数据,可以选择静默删除。您必须决定是从开头删除数据还是从结尾删除数据效果更好。
  2. 合并一些数据以释放缓冲区中的 space。
  3. 手头有一个紧急缓冲区来捕获溢出。
  4. 中止操作,必须彻底重做。
  5. 忽略错误并假装它永远不会发生。结果可能很有趣,也很出乎意料。
  6. 重新设计以加快交接/处理速度。
  7. 为峰值吞吐量重新设计更大的缓冲区。

无论如何,如果您想了解更多相关信息,请查看实时和软实时编程。