QSemaphore - 实现覆盖策略

QSemaphore - implementing overwrite policy

我想为经典 Producer--Consumer 交互实现环形缓冲区。以后数据处理任务PC都将实现为常驻线程运行,GUI作为第三线程,只用于显示实际数据和坐标起止数据通过用户交互处理。 C 能够完全处理所有传入数据可能会非常慢,但只能处理一小段时间。所以我只想分配几个 P 的 MTU 大小的环形缓冲区,但无论如何,如果 C 太慢而无法处理现有数据,可以放弃旧数据以支持新数据一个(覆盖 策略)。

我已经阅读了 Qt 帮助中的 QSemaphore 示例并意识到通过使用信号量的获取和释放我只能实现 discard 策略,因为获取指定的块在队列中将阻塞,直到没有空闲 space.

是否有任何方法可以与 QSemaphore 一起实施 overwrite 策略,或者我只需要去实施另一种方法?

我找到了这个解决方案。如果我们应该不惜一切代价将部分 src 数据推送到环形缓冲区(可以丢弃可能的新传入数据),我们应该在 Producer 部分使用 acquire() - 这将为我们提供 discard 政策。如果我们需要 overwrite 策略,我们应该在 Producer 中使用 tryAcquire() - 因此在可能的第一时间,只有最新的数据会被推送到环形缓冲区