如何解决这个循环依赖问题

3
我目前正在尝试设计一款屏幕捕获软件。
我有一个设计问题,我想知道是否可能消除PictureGetter和PictureProcessor之间的循环依赖关系。 Getter需要调用Processor告诉它图片已准备就绪。Processor必须告诉Getter它已完成图片处理。
这两个元素在不同的线程中,不能直接共享数据(我也不想共享数据),它们只能将目标对象的成员调用添加到该对象的队列中(例如queue.add(&PictureProccessor::sendPicture,picture))。 enter image description here

http://www-subatech.in2p3.fr/~photons/subatech/soft/carnac/CPP-INC-1.shtml - Cyclonecode
是的,我知道我可以提前声明所有内容。这个问题是关于是否有任何方法可以绕过它进行设计。 - user406009
哇,@themel 你是认真的吗?读一下题目要求再回答吧。 - Shawn Mclean
1
观察者模式这样的通用模式? - Vlad
你读过这个吗?http://en.wikipedia.org/wiki/Producer-consumer_problem - Pubby
@Pubby 是的,我正在使用一个 eventfd(一种像信号量一样的文件描述符)来确保读取器在没有消息时等待。 - user406009
2个回答

6

使用资源管理器,让它们都知道。获取器可以将图片排队等待经过管理器处理,管理器可以拥有一组"池化"的处理器,其中一个可以用于处理任务。处理器可以将处理后的图片排队,通过资源管理器通知到相应的获取器。我确信这个模式有一个酷炫的名字,但我现在想不起来了。


是的,这就是我正在寻找的(它还解决了我的图片管理问题)。谢谢。 - user406009

0
也许可以从获取器到处理器创建一个只有1个元素的队列。
获取器发送图片。当处理器完成时,队列为空。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接