鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

kupl::graph_submit

向kupl图中添加动态图task,即提交执行task任务。相较于kupl_graph_submit接口而言,该接口通过lambda函数特性捕获kupl_graph_submit提交任务回调函数的入参, 避免用户入参封装行为,提高接口易用性。

接口定义

int kupl::graph_submit(kupl_graph_h graph, kupl_task_desc_t *desc, const std::function<void(void)> &func);

参数

表1 参数定义

参数名

类型

描述

输入/输出

graph

kupl_graph_h

需要向其中添加动态图task的kupl graph

输入

desc

kupl_task_desc_t *

需要添加的动态图task的描述,具体见下表

输入

func

std::function<void(void)>

task的函数,task任务需要执行的具体函数

输入

表2 kupl_task_desc_t的数据结构

参数名

类型

描述

field_mask

uint64_t

掩码,用于指定结构体中哪些值有效,参数生效需要设置掩码。

具体可设置的掩码:

  • KUPL_TASK_DESC_FIELD_NAME:name生效
  • KUPL_TASK_DESC_FIELD_PRIORITY:priority生效
  • KUPL_TASK_DESC_FIELD_FLAG:flag生效

name

const char *

需要配置掩码KUPL_TASK_DESC_FIELD_NAME后才生效;task任务的名字

priority

int

需要配置掩码KUPL_TASK_DESC_FIELD_PRIORITY后才生效;task任务的优先级,数值越大,优先级越高

flag

uint32_t

需要配置掩码KUPL_TASK_DESC_FIELD_FLAG后才生效;task任务的flag,可设置为KUPL_TASK_FLAG_IMM,表示直接执行task,不需要调度

返回值

  • 成功:返回KUPL_OK
  • 失败:返回KUPL_ERROR

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h> 
#include "kupl.h" 
#include <assert.h>

int main() 
{ 
    int executor_num = kupl_get_num_executors(); 
    int executors[executor_num]; 
    for (int i = 0; i < executor_num; i++) {
        executors[i] = i;
    } 
    kupl_egroup_h egroup = kupl_egroup_create(executors, executor_num);
    kupl_graph_h graph = kupl_graph_create(egroup); 
    kupl_task_desc_t task_desc = {
        .field_mask = KUPL_TASK_DESC_FIELD_FLAG,
        .flag = KUPL_TASK_FLAG_IMM,             
    };          
    int ret = kupl::graph_submit(graph, &task_desc, []() {
        printf("graph task test\n");
    }); 
    assert(ret == KUPL_OK);

    kupl_graph_wait(graph);
    kupl_graph_destroy(graph);
    kupl_egroup_destroy(egroup);
    return 0;
}

运行结果如下。

graph task test

上述示例演示了向graph图提交task的流程。上述kupl::graph_submit函数提交task的函数,打印对应信息。