2014-01-31 67 views
4

(如何)我可以啓動多個線程這樣的:沒有加入啓動多個線程

for (i = 0; i < 10; i++) { 
    std::thread (myfunction, i, param2, param3); 
} 

沒有加入?

+0

是的,試試吧! –

+1

就是這樣。加入不會啓動線程。它阻塞,直到完成。 – juanchopanza

+0

當我這樣,我在Visual Studio中得到一個調試錯誤... R6010 abort()已被調用:( –

回答

8

試試這個

for (int i = 0; i < 10; ++i) { 
    std::thread{myfunction, i, param2, param3}.detach(); 
} 

或者,如果你想以後加入的線程,然後把它們放在一個std::vector

std::vector<std::thread> v; 
for (int i = 0; i < 10; ++i) { 
    v.emplace_back(myfunction, i, param2, param3); 
} 

// Do something else... 

for (auto& t : v) { 
    t.join(); 
} 
+0

線程開始時,他們被添加到vector,我認爲 - 有可能添加它們而不開始它們? – serup

+0

@serup當線程對象完成構建時,將開始執行線程。查看std :: async以進行延遲評估。或者將callabl取而代之的是,當你想開始時創建線程。 – Snps

+0

是或使用期貨代替 – serup

1

只需撥打join(),detach()即可。

+1

也許你可以更詳細地解釋detach() – serup