Poco Poco::NotificationQueue 未按预期工作
Poco Poco::NotificationQueue not working as expected
我开始使用Poco::NotificationQueue
.我注意到这种奇怪的行为,如果多个工作线程使用waitDequeueNotification()
在同一NotificationQueue
上等待,则只有一个胎面接收从主线程发送的通知。如果您运行 Poco 提供的 NotificationQueue.cpp示例(在本例中是从 Visual Studio 完成的,但在 Linux 上测试时结果相同),这一点很明显。
它的输出是:
Worker 1 got work notification 0 Worker 3 got work notification 2 Worker 2 got work notification 1 Worker 1 got work notification 3 Worker 3 got work notification 4 Worker 2 got work notification 5 ...
预期成果将是:
Worker 1 got work notification 0 Worker 3 got work notification 0 Worker 2 got work notification 0 Worker 1 got work notification 1 Worker 3 got work notification 1 Worker 2 got work notification 1 .....
这是一个错误还是什么?如果是这样,有什么解决方法吗?
这不是一个错误,但你的期望是错误的。
该NotificationQueue
旨在通知Worker
线程有关要执行的作业。 每个Notification
表示要完成的作业。如果 Worker
1 已经在处理该任务,为什么下一个空闲Worker
应该开始处理同一任务?多线程的整个用途是工作的并行化。因此,可以同时处理多个作业。
如果希望每个线程接收相同的Notification
,则不应使用NotificationQueue
。相反,您应该使用带有Observers
的NotificationCenter
。
有关详细信息,请参阅以下幻灯片:通知事件.pdf
实际上这是设计意图。您正在获取调用waitDequeueNotification()
或dequeueNotification()
的新通知。这两个函数都会收到通知,并将其从相应的队列中删除。
,则需要为每个线程单独发送通知(每个工作线程都应该有自己的队列)。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- Poco 库 PUT 方法未按预期工作,尽管主机、方法、内容类型设置正确
- 如何在 Poco 中将工作 HTTP 代码转换为 HTTPS
- Poco Websocket工作了50分钟后
- Poco Poco::NotificationQueue 未按预期工作