Pracuję nad programem, w którym chciałbym użyć asynchronizacji w pętli. W przykładowym kodzie, który zawarłem, jest tylko 10 elementów, więc mogłem z łatwością stworzyć wyraźną zmienną dla każdego elementu. Jednak w moim głównym programie liczba elementów w wektorze może być różna. Idealnie chciałbym stworzyć wektor asynchronicznych wątków - po jednym dla każdego elementu w tablicy - które są wypychane z powrotem na wektor asynchroniczny, kiedy przechodzę przez pętlę. Następnie chcę poczekać na zakończenie wszystkich, a następnie użyć " get() ", aby zwrócić wszystkie swoje wyjścia.Zmienna liczba asynchronicznych wątków z C++ 11
Poniższy kod wywoła async, przypisując jawną zmienną dla każdego wątku, ale czy ktoś wie jak dynamicznie wywoływać asynchroniczne w wektorze bez konieczności jednoznacznego przypisania do niego zmiennej? Idealnie, chciałbym, aby ten program wywoływał "std :: cout" raz za każdym razem, gdy przechodził, zamiast tylko raz.
#include <iostream>
#include <vector>
#include <string>
#include <future>
std::string hi (std::string input)
{
return "hello, this is " + input;
}
int main()
{
std::vector<std::string> test_vector(10, "a test");
std::future<std::string> a;
std::future<std::string> b;
for (int i = 0; i < test_vector.size (); i++)
{
a = std::async(std::launch::async, hi, test_vector[i]);
}
std::cout << a.get() << std::endl;
return 0;
}
Jakie jest dokładnie twoje pytanie? – Columbo
Jak dynamicznie wywoływać asynchroniczne za każdym razem, gdy przechodzi pętla, zamiast konieczności jawnego tworzenia zmiennej. –
Kod, jak napisano powyżej, ma poważną wadę, za każdym razem, gdy przypisujesz nową przyszłość do 'a', zmuszasz ją do blokowania i czekania na zakończenie wątku związanego z jego starą wartością, dzięki czemu skutecznie działasz w trybie szeregowym. W każdym razie, jestem zaskoczony, że rozwiązanie dynamicznej liczby kontraktów terminowych nie jest całkowicie oczywiste: przechowuj każdą nową przyszłość w dynamicznym pojemniku, takim jak wektor. Sam to powiedziałeś: _ "Chciałbym stworzyć wektor asynchronicznych wątków - po jednym dla każdego elementu w tablicy - które są wepchnięte w wektor asynchroniczny, podczas gdy ja przechodzę przez pętlę." _ Dlaczego nie po prostu Zrób to! –