繁体   English   中英

退出TBB应用程序(任务计划程序)

[英]Exiting TBB application (task scheduler)

我当前正在使用线程构建基块,通过任务计划程序启动我的最新应用程序。

如果我的任务之一遇到退出程序的原因:

1.)我如何告诉所有其他任务返回?

2.)如何在主线程中验证所有其他任务均已返回,以便可以安全地退出应用程序?

谢谢!

问题的第一部分已经回答,您可以使用任务取消来停止计划执行任务。 例如:

tbb::parallel_for(0,100, [](int i){
    for(int j = 0; j < 10000000 && !task::self().is_cancelled(); j++) {
        if( must_stop )
            task::self().cancel_group_execution();
        else
            do_my_work();
    }
});

在上面的示例中,主线程将照常等待所有任务终止,因为它是API的同步类型。 但是,如果您的问题暗示有异步运行的任务,请考虑使用低级TBB调度程序API或高级别tbb :: task_group,例如:

tbb::task_group g;
g.run([]{ Do_my_work1(); });
g.run([]{ Do_my_work2(); });
...
g.cancel();
g.wait();

最后,还有阻止终止预览功能(搜索TBB_PREVIEW_WAITING_FOR_WORKERS),如果您不仅需要等待任务完成执行,还需要等待TBB工作人员终止,则将提供帮助。

有许多功能可以取消任务检查是否取消 环顾四周...您会发现更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM