ご想像のとおり、continue_node は、先行ノードの数に相当する数の continue_msgs を受信するまで、本体を起動しません。コンストラクターで先行カウントを指定すると、カウントはその数に初期化され、ノードにエッジを追加するとそのカウントがインクリメントされます。
これを示す小さなプログラムを含めています。
#include "tbb/flow_graph.h"
#include <iostream>
using namespace tbb::flow;
struct continue_body {
continue_msg operator()(const continue_msg& /*c*/) {
return continue_msg();
}
};
struct output_body {
int my_count;
output_body() { my_count = 0; }
continue_msg operator()(const continue_msg&) {
std::cout << "Received continue_msg " << ++my_count << "\n";
}
};
int
main() {
graph g;
continue_node<continue_msg> counting_node(g, continue_body());
continue_node<continue_msg> counting_node2(g, 1, continue_body());
function_node<continue_msg> output_node(g, serial, output_body());
make_edge(counting_node, counting_node2);
make_edge(counting_node2, output_node);
for(int i = 0; i < 10; ++i) {
counting_node.try_put(continue_msg());
}
g.wait_for_all();
}
continue_node count_node2 を 1 に初期化し、それにエッジを追加しました。出力は
Received continue_msg 1
Received continue_msg 2
Received continue_msg 3
Received continue_msg 4
Received continue_msg 5
mutlifunction_nodes でこれを行う別の方法については、TBB フォーラム サイトの回答を参照してください。