我开始使用Poco::NotificationQueue
。我注意到一种奇怪的行为,如果使用NotificationQueue
在同一个waitDequeueNotification()
上等待多个工作线程,则只有一个踏步会收到从主线程发送的通知。
如果您运行Poco附带的NotificationQueue.cpp示例(在这种情况下是通过Visual Studio完成的,但是在Linux上进行测试的结果是相同的),则这很明显。
它的输出是:
预期结果将是:
这是错误还是什么?如果是这样,是否有任何解决方法?
最佳答案
这不是错误,但是您的期望是错误的。NotificationQueue
旨在通知Worker
线程有关要执行的作业。每个Notification
代表一个要完成的工作。如果Worker
1已经在执行任务,为什么下一个空闲的Worker
应该开始在同一任务上工作?多线程的全部用途是工作并行化。因此,可以同时处理多个作业。
如果希望每个线程都接收相同的Notification
,则应而不是使用NotificationQueue
。相反,您应该将 NotificationCenter
与Observers
一起使用。
有关更多信息,请参见以下幻灯片:NotificationsEvents.pdf