c++ - 如何删除/取消来自 tbb::flow::graph 的消息?

标签 c++ tbb tbb-flow-graph

我构建了一个 tbb::flow::graph,它由多个 function_node 对象组成。在执行期间,我将多条消息传递到图中(从 ~10 到 ~100000)。有时其中一个节点会抛出异常。如果是这种情况,整个图的执行将被取消,这意味着所有消息都将被丢弃。但是,我的消息彼此独立,我不希望它们的执行停止。

我可以直接在节点内捕获异常,但是当这种情况发生时,对消息的进一步处理就没有意义了。

所以我的问题是:如何取消或删除图中的单个消息而不取消图中已有的其他消息的执行?

最佳答案

对于可能抛出异常的节点,使用multifunction_node代替function_nodemultifunction_node 的主体仿函数接受其输出端口的元组,并且与 function_node 不同,它应该明确地将消息放入这些端口。因此,multifunction_node 可以丢弃/删除消息,或为每个输入创建多个输出。

请注意,multifunction_node 的多个输出端口不会为每个后继节点假定一个单独的端口。您可以有一个输出端口并将所有后继端口连接到它;输出消息将以与 function_node 相同的方式广播给每个后继节点。然而,多个输出端口允许 multifunction_node 不受单一类型输出的限制,使其成为在流程图中进行复杂消息分发的非常灵活的工具。

有关不同节点处理消息的更多信息,请参阅 single-push vs. broadcast-push , 其他 flow graph concepts , 和 node behavior policies在 TBB 文档中。

关于c++ - 如何删除/取消来自 tbb::flow::graph 的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49996661/

相关文章:

c++ - 帮助确定所需的窗口对话框资源类型

c++ - UDP数据包排列

c++ - 如何使用 TBB 多线程 "tail call"递归

c++ - 是否惯用(例如 TBB 的 thread_enumerable_specific')在原始对象上 move 赋值调用析构函数

c++ - 从(声明) header 将参数写入文件

c++ - 为什么 fgetc() 读取非 ASCII 字符? (尝试加载 GLSL 着色器)

python - 为什么pip安装tbb失败

c++ - TBB 是否支持 OpenCV 类型?

c++ - TBB C++ 多线程错误 : No matching function for call

c++ - TBB中的聚合节点