QSemaphore - 实现覆盖策略
QSemaphore - implementing overwrite policy
我想为经典 Producer
--Consumer
交互实现环形缓冲区。以后数据处理任务P
和C
都将实现为常驻线程运行,GUI作为第三线程,只用于显示实际数据和坐标起止数据通过用户交互处理。 C
能够完全处理所有传入数据可能会非常慢,但只能处理一小段时间。所以我只想分配几个 P
的 MTU 大小的环形缓冲区,但无论如何,如果 C
太慢而无法处理现有数据,可以放弃旧数据以支持新数据一个(覆盖 策略)。
我已经阅读了 Qt 帮助中的 QSemaphore
示例并意识到通过使用信号量的获取和释放我只能实现 discard 策略,因为获取指定的块在队列中将阻塞,直到没有空闲 space.
是否有任何方法可以与 QSemaphore
一起实施 overwrite 策略,或者我只需要去实施另一种方法?
我找到了这个解决方案。如果我们应该不惜一切代价将部分 src 数据推送到环形缓冲区(可以丢弃可能的新传入数据),我们应该在 Producer 部分使用 acquire()
- 这将为我们提供 discard 政策。如果我们需要 overwrite 策略,我们应该在 Producer 中使用 tryAcquire()
- 因此在可能的第一时间,只有最新的数据会被推送到环形缓冲区
我想为经典 Producer
--Consumer
交互实现环形缓冲区。以后数据处理任务P
和C
都将实现为常驻线程运行,GUI作为第三线程,只用于显示实际数据和坐标起止数据通过用户交互处理。 C
能够完全处理所有传入数据可能会非常慢,但只能处理一小段时间。所以我只想分配几个 P
的 MTU 大小的环形缓冲区,但无论如何,如果 C
太慢而无法处理现有数据,可以放弃旧数据以支持新数据一个(覆盖 策略)。
我已经阅读了 Qt 帮助中的 QSemaphore
示例并意识到通过使用信号量的获取和释放我只能实现 discard 策略,因为获取指定的块在队列中将阻塞,直到没有空闲 space.
是否有任何方法可以与 QSemaphore
一起实施 overwrite 策略,或者我只需要去实施另一种方法?
我找到了这个解决方案。如果我们应该不惜一切代价将部分 src 数据推送到环形缓冲区(可以丢弃可能的新传入数据),我们应该在 Producer 部分使用 acquire()
- 这将为我们提供 discard 政策。如果我们需要 overwrite 策略,我们应该在 Producer 中使用 tryAcquire()
- 因此在可能的第一时间,只有最新的数据会被推送到环形缓冲区