---
title: kupl::sgraph_add_node
description: "向kupl静态图中添加 sgraph node节点，即添加任务节点。相较于kupl_sgraph_add_node接口而言，该接口通过lambda函数特性捕获kupl_sgraph_add_node提交任务节点回调函数的入参， 避免用户入参封装行为，提高接口易用性。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_045.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_045.html
indexId: 750f318af319b5af1274f44dfbbac1d49e5d9989293062a3f465ce13cfde5c5f67
---
# kupl::sgraph_add_node

向kupl静态图中添加 sgraph node节点，即添加任务节点。相较于kupl_sgraph_add_node接口而言，该接口通过lambda函数特性捕获kupl_sgraph_add_node提交任务节点回调函数的入参， 避免用户入参封装行为，提高接口易用性。

#### 接口定义

kupl_sgraph_node_h sgraph_add_node(kupl_sgraph_h sgraph, kupl_sgraph_node_desc_t *desc, const std::function<void(void)> &func);


#### 参数


**表1 参数定义**

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| sgraph | kupl\_sgraph\_h | 需要向其中添加sgraph node的静态图 | 输入/输出 |
| desc | kupl\_sgraph\_node\_desc\_t \* | 需要添加的sgraph node的描述，具体见下表 | 输入 |
| func | std::function<void(void)> | sgraph node节点的函数，该节点提交执行后需要执行的具体函数 | 输入 |


**表2 kupl_sgraph_gnode_desc_t的数据结构**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| field\_mask | uint64\_t | 掩码，用于指定结构体中哪些值有效。 具体可设置的掩码： KUPL\_SGRAPH\_NODE\_DESC\_FIELD\_NAME: name生效 KUPL\_SGRAPH\_NODE\_DESC\_FIELD\_PRIORITY: priority生效KUPL\_SGRAPH\_NODE\_DESC\_FIELD\_FLAG: flag生效 KUPL\_SGRAPH\_NODE\_DESC\_FIELD\_EGROUP: egroup生效 |
| name | const char \* | 需要配置掩码KUPL\_SGRAPH\_NODE\_DESC\_FIELD\_NAME 后才能生效；该节点的名字 |
| priority | int | 需要配置掩码KUPL\_SGRAPH\_NODE\_DESC\_FIELD\_PRIORITY 后才能生效；该节点的优先级，数值越大，优先级越高 |
| flag | uint32\_t | 需要配置掩码 KUPL\_SGRAPH\_NODE\_DESC\_FIELD\_FLAG后才能生效；该节点的flag，可设置为 KUPL\_SGRAPH\_NODE\_FLAG\_IMM，表示提交后将直接执行该节点 |
| egroup | kupl\_egroup\_h | 指定当前sgraph node的亲和性信息 |


#### 返回值

- 成功：返回添加的 sgraph node节点
- 失败：返回nullptr


#### 示例

```
#include <stdio.h> 
#include "kupl.h" 

int main() 
{ 
    kupl_graph_h graph = kupl_graph_create(nullptr);

    kupl_sgraph_h sgraph = kupl_sgraph_create();
    kupl_sgraph_node_desc_t node_desc = {
        .field_mask = KUPL_SGRAPH_NODE_DESC_FIELD_NAME,
        .name = "sgraph_task",
    };
    kupl_sgraph_node_h node = kupl::sgraph_add_node(sgraph, &node_desc, []() {
        printf("sgraph task test\n");
    }); 

    kupl_sgraph_task_desc_t task_desc = {
        .sgraph = sgraph,
    };
    kupl_task_info_t info = {
        .type = KUPL_TASK_TYPE_SGRAPH,
        .desc = &task_desc,
    };
    kupl_graph_submit(graph, &info);

    kupl_graph_wait(graph);
    kupl_graph_destroy(graph);
    kupl_sgraph_destroy(sgraph);
    return 0;         
}
```

运行结果如下。
```
sgraph task test
```

上述示例演示了在静态图中添加gnode，并通过提交静态图执行的流程。上述kupl::sgraph_add_node函数向静态图sgraph中添加了sgraph node节点，该sgraph node节点的函数不需要参数。
