CPP创建子线程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <iostream> #include<thread> using namespace std; struct MyStruct { int a = 0; string s = "abc雷" ; }; //线程入口 void proc(MyStruct& a) { for ( int m = 0; m < 50; m++) { if (a.a == 0) { cout << "线程中断" << endl; break ; } std::chrono::milliseconds sd(1000); this_thread::sleep_for(sd); cout << "我是子线程,传入参数为" << a.a << a.s<< endl; cout << "子线程中显示子线程id为" << this_thread::get_id() << endl; } //函数执行完,线程停止 } int main() { MyStruct my; my.a = 20; my.s = "aa雷" ; //thread th2(proc, &my); //传递引用时要用ref才可,用&会失败,不了解这个 //thread th2(&proc, ref(my)); //线程入口加个&执行也没问题 thread th2(proc, ref(my)); //第一个参数为函数名,第二个参数为该函数的第一个参数,如果该函数接收多个参数就依次写在后面。此时线程开始执行。 //如果线程入口是成员变量,参考这个代码(在gitee上):this->th2 = new thread(&MySerialPort::读线程入口, this, 等待毫秒); cout << "主线程中显示子线程id为" << th2.get_id() << endl; //此处省略多行,不要在创建完线程后马上join,应该在程序结束前join this_thread::sleep_for(std::chrono::milliseconds(2000)); //主线程休眠2s my.a = 0; //触发子线程停止 th2.join(); //此时主线程被阻塞直至子线程执行结束。 std::cout << "Hello World!\n" ; } |
shared_mutex s_m; //锁
s_m.lock();
//s_m.lock();
s_m.unlock();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2011-12-24 Windows进程间通信:共享内存