Kurze Frage zu std::async
-
Ist folgendes idiomatisch? Wenn nicht, wie dann?
void f() { std::vector<std::future<void>> Futures; Futures.reserve(Work.size()); for(auto&& i : Work) Futures.emplace_back(std::async(std::launch::async, [x = &i] { DoWork(*x); } ) ); }
-
bump
Angepasste Version, die Exceptions korrekt handhabt:
void f() { std::vector<std::future<void>> Futures; Futures.reserve(Work.size()); for(auto&& i : Work) Futures.emplace_back(std::async(std::launch::async, [x = &i] { DoWork(*x); } )); for(auto&& i : Futures) i.get(); }
-
Mach ich auch so. So kann ich sichergehen, dass z.B. beim Zerstören des Objekts, zu dem der Thread gehört, auf dessen Beendigung gewartet wird.