首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Poco Poco::NotificationQueue未按预期工作

Poco Poco::NotificationQueue未按预期工作
EN

Stack Overflow用户
提问于 2014-01-14 10:44:06
回答 2查看 1.4K关注 0票数 1

我开始使用Poco::NotificationQueue了。我注意到了奇怪的行为,如果多个工作线程正在使用NotificationQueue在同一个waitDequeueNotification()上等待,那么只有一个进程会收到来自主线程的通知。如果您运行Poco提供的NotificationQueue.cpp示例(在本例中是从Visual完成的,但是在Linux上测试时,结果是相同的),这是显而易见的。

它的产出是:

工人1得到工作通知0工人3得到工作通知2工人2得到工作通知1工人1得到工作通知3工人3得到工作通知4工人2得到工作通知5.

预期结果将是:

工人1得到工作通知0工人3得到工作通知0工人2得到工作通知0工人1得到工作通知1工人3得到工作通知1工人2得到工作通知1.

这是个窃听器还是什么?如果是的话,有什么解决办法吗?

EN

回答 2

Stack Overflow用户

发布于 2014-05-15 14:09:54

这不是一个bug,但你的期望是错误的。

NotificationQueue旨在通知Worker线程要执行的任务。每个Notification表示要完成的任务。如果Worker 1已经在执行任务,为什么下一个空闲的Worker应该开始处理相同的任务?多线程的全部使用是工作的并行化。这样就可以同时处理多个作业。

如果希望每个线程都接收相同的Notification,则应该使用而不是使用NotificationQueue。相反,您应该将NotificationCenterObservers结合使用。

有关更多信息,请参见这些幻灯片:NotificationsEvents.pdf

票数 3
EN

Stack Overflow用户

发布于 2014-01-14 10:59:57

实际上这是设计意图。您正在获得调用waitDequeueNotification()dequeueNotification()的新通知。这两个函数都得到通知,并从适当的队列中删除它。

如果希望通知每个工作线程,则需要分别为每个线程发送通知(每个工作线程都应该有自己的队列)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21111543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档