std::thread 一:创建线程的三种方式
前言:
#include <thread> thread.join() // 阻塞 thread.detach() // 非阻塞 thread.joinable() // bool,判断线程是否支持join或者detach
正文:
创建线程有三种方式,分别是:使用函数来创建线程、使用自定义的类来创建线程、使用lambda函数来创建线程
一、使用函数来创建线程
void func1() { cout << "我是不带参数的函数" << endl; } void func2(int num) { cout << "我是带参数的函数,参数是:" << num << endl; } int main() { cout << "thread begin" << endl; thread t1(func1); t1.join(); thread t2(func2, 10); t2.join(); cout << "thread end" << endl; return 0; }
二、使用自定义的类来创建线程
#include <iostream> #include <thread> using namespace std; class myClass1 { public: // 重写operator方法 void operator()() { cout << "我是不带参数的类" << endl; } }; class myClass2 { public: int m_i; myClass2(int i) :m_i(i) {}; void operator()() { cout << "我是带参数的类,参数是:" << m_i << endl; } }; int main() { cout << "thread begin" << endl; myClass1 c1; thread t1(c1); t1.join(); myClass2 c2(6); thread t2(c2); t2.join(); cout << "thread end" << endl; return 0; }
三、使用lambda表达式来创建线程
#include <iostream> #include <thread> using namespace std; int main() { cout << "thread begin" << endl; auto myLambda1 = [] { cout << "卡布达 卡布达 我是不带参数的 lambda" << endl; }; auto myLambda2 = [](int num) { cout << "卡布达 卡布达 我是带参数的lambda,参数是:" << num << endl; }; thread t1(myLambda1); t1.join(); thread t2(myLambda2, 666); t2.join(); cout << "thread end" << endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具