std::thread方法join与detach
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的情况
两者都不调用的情况下,子线程默认在后台同步执行。
又没有什么可说的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律