关于c++多线程(2)

接着上一篇,在使用类封装线程时,遇到了这样一份代码

#include <thread>
#include <iostream>

using namespace std;

class TA{

public:
	int &m_i;
	TA(int &i):m_i(i){}

	void operator()()
	{
		cout<<"m_i1的值为:"<<m_i<<endl;
		cout<<"m_i2的值为:"<<m_i<<endl;
		cout<<"m_i3的值为:"<<m_i<<endl;
		cout<<"m_i4的值为:"<<m_i<<endl;
		cout<<"m_i5的值为:"<<m_i<<endl;
	}
	
};
int main()
{
	int myi = 5;
	TA ta(myi);
	thread mytobj(ta);
	mytobj.detach();
	cout<<"这是主线程!"<<endl;
	return 0;
}

这里有3个需要注意的点:
1,关于重载的()(),在另外一篇文章中可以看到这个的使用说明链接: 点这里.
2,多线程使用到了局部变量,而线程的加入方式是detach时,会造成不可预料的输出,代码需要修正传值不能使用引用。
3,多线程使用局部对象时,会将对象进行拷贝。

#include <thread>
#include <iostream>

using namespace std;

class TA{

public:
	int m_i;
	//
	TA(int i) :m_i(i){
		cout<<"TA()构造函数"<<endl;
	}
	TA(const TA &ta) :m_i(ta.m_i){
		cout<<"TA()拷贝构造函数"<<endl;
	}
	~TA(){
		cout<<"TA()拷贝构造函数"<<endl;
	}
	void operator()()
	{
		cout<<"m_i1的值为:"<<m_i<<endl;
		cout<<"m_i2的值为:"<<m_i<<endl;
		cout<<"m_i3的值为:"<<m_i<<endl;
		cout<<"m_i4的值为:"<<m_i<<endl;
		cout<<"m_i5的值为:"<<m_i<<endl;
	}
	
};
int main()
{
	int myi = 100;
	TA ta(myi);
	thread mytobj(ta);
	mytobj.detach();
	
	cout<<"这是主线程"<<endl;
		
	return 0;
}

看代码的时候遇到了两个问题:
函数中使用 const ,它的作用呢,参考下面的链接,链接: link.,作用就是认为传入的参数是不可以修改的,那么编译器就可以对其进行优化

然后就是ref的使用,std::ref
具体使用可以看这个,链接: 点这个.
这个实在函数模板里传参数时用到,实际效果类似与引用,但是使用方式有区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值