c++ 多线程(2)创建线程对象的方法
时间:2020-05-30
本文章向大家介绍c++ 多线程(2)创建线程对象的方法,主要包括c++ 多线程(2)创建线程对象的方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
@
一、用函数对象创建线程
// 用函数对象创建线程
#include <iostream>
#include <thread>
using namespace std;
void func(){
cout<<"我的线程开始执行了"<<endl;
//...
cout<<"我的线程结束执行了"<<endl;
}
int main(){
thread my_thread(func);
my_thread.join();//等待子线程执行结束
cout<<"I love China"<<endl;
return 0;
}
二、用类对象创建线程
// 用类对象创建线程
#include <iostream>
#include <thread>
using namespace std;
// 类要变成可调用对象需要重载操作符()
class TA{
public:
void operator()()//不能带参数,代码从这开始执行
{
cout<<"我的线程开始执行了"<<endl;
//...
cout<<"我的线程结束执行了"<<endl;
}
};
int main(){
TA ta;
thread my_thread(ta);// ta 可调用对象
my_thread.join();//等待子线程执行结束
cout<<"I love China"<<endl;
return 0;
}
// 用类对象创建线程
#include <iostream>
#include <thread>
using namespace std;
// 类要变成可调用对象需要重载操作符()
class TA{
public:
int m_i;
TA(int i):m_i(i){}
void operator()()//不能带参数,代码从这开始执行
{
cout<<"我的线程"<<m_i<<"开始执行了"<<endl;
//...
cout<<"我的线程结束执行了"<<endl;
}
};
int main(){
int myi =6;
TA ta(myi);
thread my_thread(ta);// ta 可调用对象
my_thread.join();//等待子线程执行结束
cout<<"I love China"<<endl;
return 0;
}
三、把某个类中的某个函数作为线程的入口地址
class Data_
{
public:
void GetMsg(){}
void SaveMsh(){}
};
//main函数里
Data_ s;
//第一个&意思是取址,第二个&意思是引用,相当于std::ref(s)
//thread oneobj(&Data_::SaveMsh,s)传值也是可以的
//在其他的构造函数中&obj是不会代表引用的,会被当成取地址
thread oneobj(&Data_::SaveMsh,&s);
thread twoobj(&Data_::GetMsg,&s);
oneobj.join();
twoobj.join();
四、用lambda表达式创建线程
// 用lambda表达式创建线程
#include <iostream>
#include <thread>
using namespace std;
int main(){
auto my_lambda = [] {
cout<<"我的lambda表达式线程开始执行"<<endl;
};
thread my_thread(my_lambda);// ta 可调用对象
my_thread.join();//等待子线程执行结束
cout<<"I love China"<<endl;
return 0;
}
原文地址:https://www.cnblogs.com/long5683/p/12992770.html
- as3:sprite作为容器使用时,最好不要指定width,height
- openssl版本升级操作记录
- 清除浮动(clearfix hack)
- Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)
- 小程序火爆的因素
- Log4Net使用心得
- nginx通过https方式反向代理多实例tomcat
- Linux系统下yum镜像源环境部署记录
- 特斯拉vs凯迪拉克vs奔驰:三大汽车自动驾驶系统比拼
- Centos下添加静态路由(临时和永久有效)的操作记录
- python如何保证输入键入数字
- 微信小程序自定义数据分析试水
- 挂载银行前置机Ukey到windows server2012虚拟机的操作记录
- 文件上传速度查询方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使括号有效的最少添加
- 设计模式~观察者模式
- 网页无插件视频流媒体播放器EasyPlayerPro-IOS版如何解决有声音无画面的问题?
- (建议收藏)Java基础知识笔记二(详细)
- Android 手机如何拍摄RAW图
- 「干货」基本数据类型和引用数据类型的区别
- int 和 integer :装箱和拆箱的过程,会用到什么方法,你觉得这个会对性能有影响吗,原因是什么(百度一面)
- 数组:这个循环可以转懵很多人!
- 企业远程办公视频会议系统EasyRTC-SFU下侧边栏边框超限问题如何解决?
- 编写高质量可维护的代码:数据建模
- 新版企业远程办公视频通话系统EasyRTC-SFU,如何解决用户登录信息更新不及时的问题?
- 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!
- 33.Python字符串方法find以及与序列解包的技巧结合
- 代码审计从0到1 —— Centreon One-click To RCE
- 一文带你深扒ClassLoader内核,揭开它的神秘面纱!