std::thread的join方法
std::thread的join方法是C++11中提供的一种用于等待线程结束的方法,它可以让主线程阻塞,直到指定的线程结束。join方法会把指定的线程和当前线程合并,也就是说,当前线程会等待指定的线程结束后才继续执行。
使用方法
std::thread的join方法的使用方法很简单,只需要使用语句thread.join()即可,其中thread是一个std::thread对象,join方法会让当前线程等待thread线程结束后才继续执行。
std::thread t1(func); t1.join();
上面的代码中,func是一个函数,t1是一个std::thread对象,t1.join()会让当前线程等待t1线程结束后才继续执行。
join方法的参数
std::thread的join方法还可以接受一个参数,参数是一个duration对象,表示最多等待的时间,如果指定的线程在指定的时间内没有结束,则join方法会立即返回,当前线程继续执行。
std::thread t1(func); std::chrono::milliseconds d(500); t1.join(d);
上面的代码中,func是一个函数,t1是一个std::thread对象,d是一个duration对象,表示最多等待500毫秒,t1.join(d)会让当前线程等待t1线程结束,但最多等待500毫秒,如果t1线程在500毫秒内没有结束,则join方法会立即返回,当前线程继续执行。
注意事项
- std::thread的join方法只能被调用一次,如果多次调用,会抛出异常。
- std::thread的join方法只能在线程运行结束之前调用,如果线程已经结束,则调用join方法会立即返回。
- std::thread的join方法可以在线程运行结束之前调用多次,但是只有第一次调用会真正阻塞,后续调用会立即返回。