我构建了一个tbb::flow::graph
,它包含多个function_node
个对象。在执行期间,我将多条消息传递到图形中(从~10到~100000)。有时其中一个节点会抛出异常。如果是这种情况,则取消整个图的执行,这意味着丢弃所有消息。但是,我的消息彼此独立,我不希望它们的执行被停止。
我可以直接在节点内捕获异常,但是当发生这种情况时,对消息的进一步处理将没有意义。
所以我的问题是:如何在不取消执行图中已有的其他消息的情况下取消或删除图中的单个消息?
答案 0 :(得分:4)
对于可能引发异常的节点,请使用multifunction_node
而不是function_node
。 multifunction_node
的body函子接受其输出端口的元组,与function_node
不同,应该明确地将消息放入这些端口。因此multifunction_node
可以丢弃/丢弃消息,或为每个输入创建多个输出。
请注意,multifunction_node
的多个输出端口不为每个后继者假定一个单独的端口。您可以拥有一个输出端口并将所有后继连接到它;输出消息将以与function_node
相同的方式广播给每个后继者。但是,多个输出端口允许multifunction_node
不受单一类型输出的限制,使其成为流程图中复杂消息调度的非常灵活的工具。
有关不同节点的邮件处理的详细信息,请参阅TBB文档中的single-push vs. broadcast-push,其他flow graph concepts和node behavior policies。