Generating C++ Stubs
To generate stubs for a working C++ application:
- Create a graph in the canvas as described in the Adding Nodes, Edges, and Ports section.
- Save the graph as described in the Saving a Graph to a File section.
- Click theGenerate C++icon on the toolbar to create C++ files.
Generate C++ Stubs for a Hello World Sample
For example, below is a three-node graph you can use to create a Hello World sample. This graph consists of a
source_node
followed by two
continue_node
objects. The first node is named s0 and the next two nodes are named
c0
and
c1
. All nodes have
continue_msg
objects as their input and/or output types. The body of each node is defined by its
C++ Function Object
field, as shown below.

To generate C++ stubs from this Hello World sample graph:
- Create the sample graph by adding asource_nodefollowed by twocontinue_nodeobjects and connect them with edges. Modify the node names in theNode Properties: name thesource_nodeass0and the next twocontinue_nodeobjects asc0andc1.
- Set the following properties to the nodes:Node NameNode TypeInput Port TypeOutput Port TypeC++ Function Objects0source_nodeNonecontinue_msg[](continue_msg &c) -> bool { static bool done = false; if (!done) { done = true; return true; } else { return false; } }c0continue_nodecontinue_msgcontinue_msg[](const continue_msg &m) -> continue_msg { printf("Hello"); return m; }c1continue_nodecontinue_msgcontinue_msg[](const continue_msg &m) -> continue_msg { printf(" World!\n"); return m; }
- Click theSaveicon on the toolbar to save this graph asHelloWorld.graphml.
- Click theGenerate C++icon on the toolbar to generate the C++ stubs.
The generation of the stub files should be reported as successful:

The result of C++ code generation is one file located in the same directory where the GraphML* file is last saved. The file name generated is
HelloWorld_stubs.cpp
. It should contain the following code:
// // Automatically generated by Flow Graph Analyzer: // C++ Code Generator Plugin version XYZ // #define TBB_PREVIEW_FLOW_GRAPH_NODES 1 #include "tbb/flow_graph.h" #include "tbb/tick_count.h" #include "tbb/atomic.h" #include <cstdlib> using namespace std; using namespace tbb; using namespace tbb::flow; size_t key_from_message(char *k) { return reinterpret_cast<size_t>(k); } template<typename T> size_t key_from_message(const T &k) { return static_cast<size_t>(k); } static void spin_for( double weight = 0.0 ) { if ( weight > 0.0 ) { tick_count t1, t0 = tick_count::now(); const double weight_multiple = 1e-6; const double end_time = weight_multiple * weight; do { t1 = tick_count::now(); } while ( (t1-t0).seconds() < end_time ); } } int build_and_run_HelloWorld_g0() { graph HelloWorld_g0; source_node< continue_msg > s0( HelloWorld_g0, [](continue_msg &c) -> bool { static bool done = false; if (!done) { done = true; return true; } else { return false; } }, false); continue_node< continue_msg > c0( HelloWorld_g0, 0, [](const continue_msg &m) -> continue_msg { printf("Hello"); return m; }); continue_node< continue_msg > c1( HelloWorld_g0, 0, [](const continue_msg &m) -> continue_msg { printf(" World!\n"); return m; }); #if TBB_PREVIEW_FLOW_GRAPH_TRACE HelloWorld_g0.set_name("HelloWorld_g0"); s0.set_name("s0"); c0.set_name("c0"); c1.set_name("c1"); #endif make_edge( s0, c0 ); make_edge( c0, c1 ); s0.activate(); HelloWorld_g0.wait_for_all(); return 0; } int main(int argc, char *argv[]) { return build_and_run_HelloWorld_g0(); }
In the code above, note the
s0
,
c0
, and
c1
nodes reflect the properties described in the previous table.
If you have the paths to the
Intel® oneAPI Threading Building Blocks
(oneTBB
) library set up in your environment, you can build this application from a command prompt:
- On a Windows* system, run the following command from a Microsoft Visual Studio* command prompt:cl /EHsc HelloWorld_stubs.cpp tbb.lib
- On a Linux* system, run the following command:g++ -std=c++11 HelloWorld_stubs.cpp -ltbb
In addition, Flow Graph Analyzer allows you to control execution policies for nodes, such as setting lightweight for computational nodes and asynchronous nodes. If you set lightweight policies for any node, the current code generator generates stubs for
oneTBB
.
See more samples demonstrating this feature in the
samples/code_generation
directory.