1、std::join
std::join
是std::thread
类的成员函数之一,用于等待线程的执行完成。
#include <iostream> #include <utility> #include <thread> #include <chrono> #include <atomic> void process(std::string str_info) { for (int i = 0; i < 500; ++i) { std::cout << "sub thread " << str_info.c_str() << " executing\n"; std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } int main() { std::thread tr(process, "子线程"); tr.join(); system("pause"); }
代码中tr.join()调用后,主线程将在执行完子线程任务后继续执行主线程任务,tr.join()将会阻塞主线程。
2、std::detach
std::detach
是std::thread
类的成员函数之一,用于将线程分离,使得线程的执行与创建线程的对象无关。
#include <iostream> #include <utility> #include <thread> #include <chrono> #include <atomic> void process(std::string str_info) { for (int i = 0; i < 500; ++i) { std::cout << "sub thread " << str_info.c_str() << " executing\n"; std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } int main() { std::thread tr(process, "子线程"); tr.detach(); system("pause"); }
代码中tr.detach()调用后,子线程与主线程进行分离,主线程继续执行,不会等待子线程执行,子线程在后台并行执行。此处需要注意的是在子线程分离后将无法使用std::thread::join函数等待线程执行完成。
3、不调用std::detach与std::join的情况
两者都不调用的情况下,子线程默认在后台同步执行。
标签:std,include,join,thread,线程,detach From: https://www.cnblogs.com/missyou0813/p/17853792.html