这里有两种从对象启动线程的玩具实现方式-一种来自构造函数,另一种来自成员函数。我搜索了SO,但没有具体答案。当SO专家说不要从构造函数启动线程时,我还是听不懂,如果从构造函数启动,可能会出现什么问题。与I相比,II具有什么优势?
实现1:从成员函数启动
class foo {
thread th;
public:
foo() {
}
void run() {
th = thread([]() {
cout << " New thread \n";
});
}
~foo() {
cout << " Thread joining\n";
th.join();
}
};
int main()
{
for (int i = 0; i < 5; i++) {
foo f;
f.run();
Sleep(2000);
}
return 0;
}
实现2:在构造函数中启动
class foo {
thread th;
public:
foo() {
th = thread([]() {
cout << " New thread \n";
});
}
~foo() {
cout << " Thread joining\n";
th.join();
}
};
int main()
{
for (int i = 0; i < 5; i++) {
foo();
Sleep(2000);
}
return 0;
}