Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 等待多个异步任务完成_C++_Multithreading_Stdasync - Fatal编程技术网

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以确保。看见