ChunelFeng / CGraph

【A common used C++ DAG framework】 一个通用的、无三方依赖的、跨平台的、收录于awesome-cpp的、基于流图的并行计算框架。欢迎star & fork & 交流
http://www.chunel.cn
MIT License
1.77k stars 322 forks source link

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

Closed cgeffect closed 9 months ago

cgeffect commented 9 months ago

伪代码 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工具也可以实现?

ChunelFeng commented 9 months ago

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

ChunelFeng commented 9 months ago

done