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.


Anmelden zum Antworten