3

我正在编写一个程序,其中几个生产者生成一些应该由多个消费者处理的数据。由于每条数据的消耗大约需要 100 毫秒,并且目标平台有很多处理器,所以对我来说,每个生产者和每个消费者都有自己的线程似乎很自然。我的问题是:Qt 信号/槽是将数据块从生产者传递给消费者的好方法吗?或者您是否提出了更好的解决方案(强烈推荐 Qt)。

以防万一,生产者每小时左右会产生数十万个突发数据。

4

2 回答 2

2

我认为信号/插槽机制在这里不合适,因为每个信号都分配到所有连接的插槽。这意味着如果你使用信号/槽机制作为你的“工作队列”,你不会在消费者身上得到任何负载分配,而是所有消费者都可以做同样的(重复的)工作。

更好的机制是使用容器作为工作队列(生产者将项目添加到容器中,消费者删除它们),使用一个QMutex来避免并发问题和一个(或两个,如果你想施加最大大小)QWaitCondition来阻止消费者当他们没有工作时。

于 2013-01-19T16:23:21.477 回答
1

我建议您避免使用信号和插槽,因为它们充当事件,因此一旦发出信号,您就无法控制执行。因此,我建议您使用锁或互斥锁(例如 QMutex)进行互斥。只需使用 QMutex 类中的锁定和解锁方法来保护您的队列。我认为它会比使用信号和槽更快,因为如果您传递对象,它将传递对象的副本,并且在传递指针的情况下,您将不会保护对象。

干杯,

于 2013-01-19T16:09:51.877 回答