【问题标题】:TBB C++ multithreading error: No matching function for callTBB C++ 多线程错误:没有匹配的调用函数
【发布时间】:2017-01-01 20:26:16
【问题描述】:

以下 C++ 代码适用于英特尔 TBB。此代码也是由 Flow Graph 生成的。 我有 2 个编译错误:

No matching function for call to 'make_edge'
No matching function for call to 'make_edge'

这是带有定义的代码:

 function_node< tbb::flow::tuple<char *,char *>, char * > result_reporter(position3_g0, 1, []( const tbb::flow::tuple<char *,char *> & in ) -> char * {...

function_node< char *, char * > sott_target_node(position3_g0, unlimited, []( char *buffer ) -> char * {

这是导致编译错误的 TBB 调用代码

make_edge( result_join, result_reporter);

make_edge( sott_target_node, input_port< 2 >( result_join ));

我很乐意提供所有代码,但 StackOverflow 会阻止太多代码而几乎没有描述。任何人都可以帮助找出这些错误吗? 谢谢

【问题讨论】:

    标签: c++ multithreading tbb tbb-flow-graph


    【解决方案1】:

    您正在尝试错误地使用 function_node 的输入。输入为 tuple&lt;char *, char *&gt; 的 function_node 采用输出为 tuple&lt;char *, char *&gt; 的前任。

    如果这是你想要的(每个char *类型的节点有两个输入,char *的输出)你应该使用indexer_node的组合(它有多个输入端口,并且任何端口上的任何输入都将导致发出带有端口号和输入包装的消息)连接到function_node,该function_node采用indexer_node的输出类型。请查看文档,如果您有任何问题,请询问。

    【讨论】:

    • 如果您需要节点仅在收到所有前辈的输出时才被触发,您需要一个 join_node。 software.intel.com/en-us/node/506236 。加盟政策有3种;我猜你想要一个排队加入。 indexer_node 立即转发它从每个端口接收到的每条消息;连接会一直等待,直到每个输入端口至少有一个输入,然后再转发它们。连接的输出是一个元组。
    猜你喜欢
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多