0
需要創建並運行線程,在一個循環中。這裏是編譯/運行的代碼,但它不會並行創建/運行線程,即形成此代碼,我期望三個線程並行運行,但是函數的每個調用都會按順序發生,如。爲什麼?並行函數調用與異步
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