0
我踢了幾個異步任務,像這樣:等待多個異步任務來完成
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();
我從這個鏈接Waiting for multiple futures?噸看沒有多頭期貨等待。
是否有任何技巧可以用來查看我的所有任務是否已完成?
我可以將每個未來存儲在一個數組或向量中,然後依次等待每個未來嗎?
你可以做的一件事是讓每個線程引用一個原子布爾值。任務完成後,可以將其設置爲true。然後你知道那個線程完成了。這允許您在沒有等待命令的情況下輪詢變量。 – NathanOliver
您是否嘗試將每個未來存儲在數組或向量中並等待每個未來?聽起來像一個完全合理的模式使用。 – huu
請注意,僅僅調用std :: async()不足以保證所有lambda表達式都作爲異步任務運行,您需要指定std :: launch :: async以確保這一點。請參閱http://en.cppreference.com/w/cpp/thread/async –