C++ 等待多个异步任务完成
我正在启动以下几个异步任务:C++ 等待多个异步任务完成,c++,multithreading,stdasync,C++,Multithreading,Stdasync,我正在启动以下几个异步任务: for(UINT Id: myIds) { std::async([=] { DoSomeStuffUsingId(Id); return true; }); } 我有一个功能需要知道是否所有这些任务都已完成: void SomeFunction() { if (all async tasks have completed) { do some
for(UINT Id: myIds)
{
std::async([=]
{
DoSomeStuffUsingId(Id);
return true;
});
}
我有一个功能需要知道是否所有这些任务都已完成:
void SomeFunction()
{
if (all async tasks have completed)
{
do something else
}
}
我知道我可以等待异步任务,如下所示:
std::future<bool> fut = std::async (do something);
fut.wait();
std::future fut=std::async(做点什么);
等等;
我从这个链接中看到,现在还没有等待多重期货
有没有什么技巧可以让我看看我所有的任务是否都完成了
我可以将每个未来存储在数组或向量中,然后依次等待每个未来吗?您可以使用std::shared_future(可以复制)或vector::emplace_back()来放置无法复制但可以移动的std::futures 解决此问题的一个简单方法是将
共享\u ptr
传递给所有异步函数。让这些异步函数调用collector::collect(…)
将其数据传递给收集器。所有异步函数返回后,收集器
对象将自动删除。现在使用析构函数收集器::~collector()
作为所有异步函数都已完成的通知。可以做的一件事是让每个线程引用一个原子bool。当任务完成时,他们可以将其设置为true。那么你就知道那个线程已经完成了。这允许您在不使用wait命令的情况下轮询变量。您是否尝试将每个未来存储在数组或向量中并等待每个未来?听起来这是一个非常合理的模式。请注意,仅调用std::async()不足以保证所有lambda都作为异步任务运行,您需要指定std::launch::async以确保。看见