3

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

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

所以我的问题是:如何在不取消执行图表中已经存在的其他消息的情况下从图表中取消或删除一条消息?

4

1 回答 1

5

对于可能引发异常的节点,请使用multifunction_node而不是function_node. a 的主体函子multifunction_node接受其输出端口的元组,并且与 不同function_node,应该显式地将消息放入这些端口。因此multifunction_node可以丢弃/丢弃消息,或为每个输入创建多个输出。

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

有关不同节点处理消息的更多信息,请参阅单推与广播推、其他流程图概念以及 TBB 文档中的节点行为策略

于 2018-04-25T10:01:07.333 回答