2014-01-31 66 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