我目前使用线程构建块来启动我的最新应用程序,使用任务调度程序。退出TBB应用程序(任务调度程序)
如果我的任务之一,遇到一个理由来退出程序:
1)我怎么能告诉所有的其它任务返回?
2.)如何在主线程中验证所有其他任务已返回,以便我可以安全地退出该应用程序?
谢谢!
我目前使用线程构建块来启动我的最新应用程序,使用任务调度程序。退出TBB应用程序(任务调度程序)
如果我的任务之一,遇到一个理由来退出程序:
1)我怎么能告诉所有的其它任务返回?
2.)如何在主线程中验证所有其他任务已返回,以便我可以安全地退出该应用程序?
谢谢!
有许多功能to cancel tasks和check for cancellation。环顾四周......你会发现更多。
该问题的第一部分已被回答,您可以使用task cancellation来停止计划执行任务。例如: -
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的同步型。但是,如果你的问题意味着有异步运行的任务,可以考虑使用low-level TBB scheduler 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工作人员终止。