C中的PipeFIFO清算

问题描述 投票:3回答:1

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

问题是读取数据的过程有些 "重",可能读取速度不够快。管道会满,读数会延迟到程序结束。

因为不能容忍这样的延迟,所以我可以在写的部分检测管道是否满了(这种情况下,如果我说的不对,请纠正我,它会等待它有足够的空间来写数据)。如果这样的检测是可能的,那么我怎样才能清除管道中的内容,使读取部分能够立即接收到最近的数据,而不需要通过整个管道中充满了旧的螺柱?

简而言之,有没有一种方法可以清空管道中的数据(不需要关闭和重新打开将是一个优点)。

非常感谢。

c pipe delay fifo
1个回答
0
投票

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

改变模式。调整读卡器,使其能扔掉一定比例的数据 的阅读量。

撰稿人 当写入者看到一个完整的队列,那么下一个写入的数字是一个特殊的数字(如NaN),然后写入所需的数字。

读取器 读者被设定为扔掉P%的数字。

读取器读取一个数字--根据需要等待。 如果它不是扔掉的候选号码,则照常进行。

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

当读取器读取到特殊数字时,它知道自己扔掉的数字不够多,于是增加其百分比,然后它再次读取管道。

如果读者和写手方的整体表现相差不大,那么读者每隔一段时间就会扔掉1个号码,以平衡迅速的写手和蹒跚的读者表现。 如果有轻微的偏向于空队列而不是满队列,那么管道将很少被填满,而读者将更多地收到新鲜的号码。

© www.soinside.com 2019 - 2024. All rights reserved.