thread官方 创建可执行线程对象,调用join执行
joinable() 判断该线程是不是可执行线程
join() 当线程执行完毕时该函数退出:一直等待线程执行完毕。对于可执行thread对象,必须要调用join()函数。
join和detach的区别 一般情况都使用join来准确的知道线程已经执行完毕并可以析构。
在声明一个std::thread对象之后,都可以使用detach和join函数来启动被调线程,区别在于两者是否阻塞主调线程。
(1)当使用join()函数时,主调线程阻塞,等待被调线程终止,然后主调线程回收被调线程资源,并继续运行;
(2)当使用detach()函数时,主调线程继续运行,被调线程驻留后台运行,主调线程无法再取得该被调线程的控制权。当主调线程结束时,由运行时库负责清理与被调线程相关的资源。
std::async 非常棒的一篇文章
std::thread 缺点:1 异常出现就退出;2 无法获取返回值;
C++11 chrono计时(多线程环境)