Как удалить / отменить сообщение из tbb :: flow :: graph?

Я построил tbb::flow::graph который состоит из нескольких function_node объекты. Во время выполнения я передаю несколько сообщений в график (от ~ 10 до ~ 100000). Иногда один из узлов выдает исключение. В этом случае выполнение всего графа отменяется, что означает, что все сообщения отбрасываются. Тем не менее, мои сообщения независимы друг от друга, и я не хочу, чтобы их выполнение было остановлено.

Я могу поймать исключение непосредственно внутри узла, но когда это произойдет, дальнейшая обработка сообщения не будет иметь смысла.

Поэтому мой вопрос: как я могу отменить или удалить одно сообщение из графика, не отменяя выполнение других сообщений, которые уже есть в графике?

1

Решение

Для узлов, которые могут вызвать исключение, используйте multifunction_node вместо function_node, Функтор тела multifunction_node принимает кортеж из своих выходных портов и, в отличие от function_node, следует явно поместить сообщения в эти порты. Следовательно multifunction_node может отбрасывать / отбрасывать сообщения или создавать несколько выходов для каждого входа.

Обратите внимание, что несколько выходных портов multifunction_node не предполагайте отдельный порт для каждого преемника. Вы можете иметь один выходной порт и подключить к нему всех преемников; выходное сообщение будет передаваться каждому преемнику так же, как function_node делает. Однако несколько выходных портов позволяют multifunction_node не ограничиваться одним типом вывода, что делает его очень гибким инструментом для сложной отправки сообщений в потоковом графе.

Для получения дополнительной информации об обработке сообщений различными узлами см. один толчок против широковещательного толчка, Другой концепции потокового графа, и политики поведения узлов в документации TBB.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]