ChunelFeng / CGraph

【A common used C++ DAG framework】 一个通用的、无三方依赖的、跨平台的、收录于awesome-cpp的、基于流图的并行计算框架。欢迎star & fork & 交流

Home Page:http://www.chunel.cn

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

如何从主线程里面拿到异步线程的执行结果?

cgeffect opened this issue · comments

伪代码
pseudocode.txt

需求:
1. 主线程里拿到任务列表, 每一个任务都开启一个异步线程去执行, 并且异步线程执行完毕之后, 存储执行的结果.
2. 在主线程去轮训每一个异步线程的执行结果, 拿到结果之后, 去做事情
3. 所有的异步任务都结束之后, 结束任务.
4. 再次循环1 2 3步骤

  1. 通过 CGRAPH_GET_EPARAM 获取的参数,是在非节点内部生成的,仅能在当前节点获取和使用,且类型是 GElementParam 类的子类, 该类型的参数不能在pipline中传递.
    在这个条件约束下, 如何实现外部的参数能在pipline内部传递
    如果参数需要从节点外部传入, 那么需要使用addEParam, 把参数从外部传入节点内部, 然后在节点内部使用 CGRAPH_CREATE_GPARAM() 创建参数,
    CGRAPH_GET_GPARAM() 获取参数, 并把外部的参数赋值给节点内部的参数, 以达到可以再pipline内部传递

    伪代码
    CGRAPH_CREATE_GPARAM(MyParam, "key");
    auto param = CGRAPH_GET_GPARAM(MyParam, "key")
    auto conn = CGRAPH_GET_EPARAM(MyParam, "key");
    param->x = conn.x;
    param->y = conn.y;

  2. 如何在外部, 从主线程拿到每一个节点的执行结果, 使用全局的一个变量来记录每一个异步任务的执行结果吗? 如伪代码里面taskResultMap

是否直接使用threadpool工具也可以实现?

语音沟通了一下, 不需要在主线程里做n个通知逻辑,转而在n个 node中,进行通知的触发即可。
如果是固定写入 一个EParam信息,推荐考虑模板节点的用法,代码可能会更简介一些。

done