C++多线程学习笔记02
2022/1/14 14:03:23
本文主要是介绍C++多线程学习笔记02,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.包含头文件 thread
主程序从main()开始执行,进程是否完毕标志是 主线程 是否完毕
所以一般情况:想保持子线程运行状态,主线程要一直保持运行。
创建线程:
1.函数
thread mytobj(myprint); // 创建线程 myprint可调用对象
2.类对象
TA ta;
thread mytoj1(ta);
3.lambda表达式
auto mylambda = [] {
cout << “我的线程开始” << endl;
cout << “我的线程结束” << endl;
};
thread mytoj2(mylambda);
线程函数:
- mytobj.join();//阻塞主线程,让主线程等待子线程执行完毕,当执行完毕,主线程继续执行;
注意:主线程要等待子线程执行完毕后,才能退出(传统的)
2.mytobj.detach();//主线程与子线程分离执行
注意:一旦detach()与主线程失去联系,由运行时刻接管,清理相关资源。
一旦使用detach()后不能使用join();
3.joinable();判断是否可以成功使用join()或detach(),返回true可以join()or detach(),false不能;
函数对象
// 线程.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> using namespace std; #include<thread> //创建线程从一个初始函数开始运行 void myprint() { cout << "线程开始执行" << endl; cout << "线程开始执行" << endl; cout << "线程开始执行" << endl; cout << "线程开始执行" << endl; cout << "线程开始执行" << endl; cout << "线程执行结束" << endl; } int main() { thread mytobj(myprint); // 创建线程 myprint可调用对象 mytobj.join();//阻塞主线程,让主线程等待子线程执行完毕,当执行完毕,主线程继续执行; //1.3 joinable();判断是否可以成功使用join()或detach(),返回true可以join()or detach(),false不能; if (mytobj.joinable()) { cout << "joinable == true" << endl; mytobj.join(); } else cout<< "joinable == false" << endl; /*mytobj.detach(); if (mytobj.joinable()) cout << "joinable == true" << endl; else cout << "joinable == false" << endl;*/ cout << "I LOVE HE DAN " << endl; return 0; }
类对象
// 线程.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> using namespace std; #include<thread> //创建线程从一个初始函数开始运行 class TA { public: void operator()() { cout << "线程开始执行" << endl; cout << "线程开始执行" << endl; cout << "线程开始执行" << endl; cout << "线程开始执行" << endl; cout << "线程开始执行" << endl; cout << "线程执行结束" << endl; } }; int main() { //2.类对象 //主线程结束,这个对象实际上被复制 到线程中去,执行完主程序后,ta会被销毁,但所复制的ta对象依旧存在。 //所以,只要这个TA类对象里没有引用、指针,就不会产生问题。 TA ta; thread mytoj1(ta); mytoj1.join(); cout << "I LOVE HE DAN " << endl; return 0; }
lambda表达式
// 线程.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> using namespace std; #include<thread> int main() { //3.用lambda表达式 auto mylambda = [] { cout << "我的线程开始" << endl; cout << "我的线程结束" << endl; }; thread mytoj2(mylambda); mytoj2.join(); cout << "I LOVE HE DAN " << endl; return 0; }
这篇关于C++多线程学习笔记02的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11国产医疗级心电ECG采集处理模块
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南