C++11多线程学习3 : join和detach
在上一篇文章C++11多线程学习1中的代码,我们使用了join。但是其实使用detach也是一样的结果。
int _tmain(int argc, _TCHAR* argv[])
{
std::thread t1(test, "t1", 1000);
std::thread t2(test, "t2", 1500);
t1.join(); // detach()
t2.join(); // detach()
char ch;
std::cin >> ch;
return 0;
}
无论是join和detach其结果都是:
但是如果换成这份代码,结果就不同了。
class test
{
public:
test() { n = 0; }
~test() {}
public:
void testcout(const std::string& str, int time)
{
for (int i = 0; i < 10; i++)
{
Sleep(time);
std::cout << str.c_str() << i << std::endl;
n++;
}
std::cout << str.c_str() << &n << std::endl;
}
private:
int n;
};
void testtest(const std::string& str, int time)
{
test te;
std::thread t(&test::testcout, te, str, time);
t.detach();
}
int _tmain(int argc, _TCHAR* argv[])
{
testtest("t1", 500);
testtest("t2", 700);
char ch;
std::cin >> ch;
return 0;
}
detach的结果依然为
但是join的结果就成了
以我的理解,结束语句块的时候(比如说函数结束)……主线程会一直等着join的线程,然后一起结束。但是detach的线程因为已经脱离了控制,所以主线程不会等他。