2017-02-23 5 views
0

müssen Threads in einer Schleife erstellen und ausführen. Hier ist der Code, der kompiliert/läuft, aber er erstellt keine Threads parallel, d. H. Formt diesen Code. Ich würde erwarten, dass drei Threads parallel laufen, aber stattdessen jeder Aufruf der Funktion , also, in der Reihenfolge passiert. Warum?Paralleler Funktionsaufruf mit Async

template<typename T> 
void say(int n, T t) { 
    cout << " say: " << n << std::flush; 
    for(int i=0; i<10; ++i) { 
    cout << " " << t << std::flush; 
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); 
    } cout << " end " << std::flush << endl; 
} 

template<typename F, typename... Ts> 
inline auto reallyAsync(F&& f, Ts&&... params){ 
    return std::async(
     std::launch::async, 
     std::forward<F>(f), 
     std::forward<Ts>(params)...); 
} 

int main() { 
    float x = 100; 

    for(int i=0; i<3; ++i) { 
    auto f = reallyAsync(&say<decltype(x)>, i, x*(i+1)) ; 
    } 
} 


output: 
say: 0 100 100 100 100 100 100 100 100 100 100 end 
say: 1 200 200 200 200 200 200 200 200 200 200 end 
say: 2 300 300 300 300 300 300 300 300 300 300 end 

Antwort

Verwandte Themen