【发布时间】:2010-09-26 10:43:06
【问题描述】:
我有一个“生产者”对象,它遍历一些数据并根据队列中的下一个数据项发出各种信号。
这些信号中的每一个一次最多由一个“消费者”对象处理(在将生产者的信号附加到另一个消费者之前,它会注意断开其插槽)。
如果消费者端的处理由于某种原因失败,队列的处理必须停止,因为继续它没有意义。
让生产者知道由于特殊情况不需要进一步处理的最佳方式是什么?由于消费者有一个指向生产者的指针,我想,可能有多种方式,只是我不确定它们是否是竞争条件安全的(我不知道我是否可以依赖于发出/处理了哪些信号)。
我能想到的两种方法:
- 在生产者上设置一个标志,可以在下一次迭代中检查它,以便它知道是时候停止了
- 在消费者(以及生产者的相应插槽)上注册一个信号,当处理应该停止时将发出该信号
我想知道这些解决方案在以下情况下是否可行:
- 生产者和消费者属于同一个线程
- 生产者和消费者属于不同的线程
简而言之,我必须绝对确保,如果消费者报告错误,则不会发生额外的处理。
您可能已经猜到了,我对 Qt 的这些方面的习语还不是很熟悉。
【问题讨论】:
标签: c++ qt qt4 signals-slots