如何从TBB :: Flow :: Graph中删除/取消消息

How to remove/cancel a message from tbb::flow::graph?

本文关键字:删除 取消 消息 Flow TBB Graph      更新时间:2023-10-16

我已经构造了一个由几个function_node对象组成的tbb::flow::graph。在执行期间,我将多个消息传递到图表中(从〜10到〜100000(。有时,其中一个节点会引发异常。如果是这样,则取消整个图的执行,这意味着所有消息均已丢弃。但是,我的消息彼此独立,我不希望他们的执行停止。

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

所以我的问题是:如何从图中取消或删除单个消息,而无需取消图表中已经存在的其他消息?

对于可能引发异常的节点,使用multifunction_node而不是function_nodemultifunction_node的身体函数接受其输出端口的元组,与function_node不同,应明确将消息发送到这些端口。因此,multifunction_node可以丢弃/删除消息,或为每个输入创建多个输出。

请注意,multifunction_node的多个输出端口不为每个后继者假设一个单独的端口。您可以拥有一个单个输出端口并将所有后继者连接到它;输出消息将以与function_node相同的方式向每个继任者广播。但是,多个输出端口允许multifunction_node不受单一类型的输出的限制,这使其成为流程图中复杂消息调度的非常灵活的仪器。

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