我目前使用線程構建塊來啓動我的最新應用程序,使用任務調度程序。退出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工作人員終止。