c - C中的管道/FIFO清除

标签 c pipe delay fifo

我有两个进程在通信。第一个将数据写入管道或 fifo(我都试过了),第二个读取其中的内容。目前发送的数据是直接来自传感器的六个 float ,因此需要经常上传(10Hz)。

问题是进程读取数据有点“重”,可能读取速度不够快。管道将满,读取将延迟到程序结束。

因为不能容忍这样的延迟,我可以在写入部分检测管道是否已满(在这种情况下,如果我错了,请纠正我,它会等待它有足够的空间来写入数据) .如果可以进行这样的检测,我怎样才能只清除管道的内容,以便读取部分立即接收到最新数据,而不必遍历充满旧 studd 的整个管道?

简而言之,有没有一种方法可以清空其数据管道(不必关闭并重新打开会更好)。

非常感谢,

最佳答案

这将减少管道充满的频率,但不会消除它。

范式改变:调整阅读器以丢弃一定比例的阅读。

作家
当 writer 看到一个完整的队列时,它写入的下一个数字是一个特殊数字(例如 NaN),然后写入所需的数字。

阅读器
读者将丢弃 P% 的数字。

读取器读取一个数字 - 根据需要等待。如果不是要丢弃的候选人,则照常进行。

当读取器考虑丢弃一个数字以满足其丢弃百分比时,它首先测试管道是否为空。如果是这样,读者就知道要减少被扔掉的百分比并使用第一次阅读的数字。如果管道不为空,它会读取管道,丢弃第一个数字并使用第二个数字。

当读取器读取特殊数字时,它知道它没有丢弃足够的数字并增加其百分比,然后再次读取管道。

如果读取器和写入器端的整体性能差异不大,读取器将每隔一段时间丢弃 1 个数字,以平衡快速写入器和缓慢读取器的性能。如果稍微偏向于空队列而不是满队列,管道将很少填满,读者将更频繁地收到新数字。

关于c - C中的管道/FIFO清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964985/

相关文章:

c - 不确定地从两个管道中读取,然后在 C 中的标准输出上打印

c - 在文件夹中查找特定文件并编辑它

c - 在数组中找到孤独的整数

c - 快速服务器端图像生成库?

java - 来自 Java 的 clang 的 `pkg-config` 参数

linux - 在 bash 中,循环并发送命令来执行

c - C中的管道用法

c# - 如何让 Task.Delay 提前完成

wordpress - 如何延迟我的网站的下拉菜单

android - 在 iPad 和 Android 上大延迟执行声音