【发布时间】:2015-11-13 19:29:41
【问题描述】:
我用 C++ 编写了一个软件,用于处理来自相机的视频流,使用 openCV 库。 我想在处理视频帧时保存它,以便有可能使用与输入完全相同的视频多次离线运行代码。 我正在考虑使用生产者/消费者模式来使用多线程。
我的想法是让一个生产者(帧采集器)和两个消费者(一个用于处理图像,另一个用于将帧保存在文件中(作为视频))。
我没有多线程编程的经验,所以我在网上搜索了一些教程。 我找到的所有教程都是关于一个生产者和一个消费者的,但我需要的略有不同:我需要一个生产者向两个消费者发送相同的图像,并且在两个消费者完成工作后,继续下一个框架。关键是生产者将有一个存储帧的队列,而消费者都需要从同一个队列中读取一次相同的元素。
你有什么建议吗? 您认为我选择的模式符合我的需要吗?
谢谢。
【问题讨论】:
-
将图像“发送” 给 2 个消费者是什么意思?当然,您只需将它放在共享内存中并让他们访问它,而不是在任何地方发送它。我看不出发送两次的意义——让每个人都按自己的意愿访问它,然后每个人都可以指示他们何时完成,这告诉你可以覆盖它。还可以考虑使用几帧的缓冲区,这样您就可以容忍磁盘写入速度的微小变化。
标签: c++ multithreading opencv