【C++11】多线程-----创建与使用线程


前言

本节课我们奖的是C++ 11多线程的创建与使用线程
我们多线程的意义在哪:充分利用CPU资源、简化编程模式、简化异步事件处理、使GUI更有效率…


提示:以下是本篇文章正文内容,下面案例可供参考

创建多线程及lambad表示式的讲解

1.头文件:
多线程的头文件为:#include <thread> using namespace std;

2.怎么创建线程?
首先我们要知道,线程就是一可调用的函数,在C++中,可以使用函数做为入口,也可以用类,类成员函数。main函数也是一个线程,但他是主线程,主线程的结束是在main函数return时,我们自己创建的子线程也是一样:
1).用函数做为入口函数:

void myprint()
{
	cout << "my name is \"my print\"" << endl;
}
int main()
{
	thread t(myprint);//创建一个入口函数为myprint子线程
	return 0;
}

2.用一个类作入口函数

class A
{
public:
	void operator() ()
	{
		cout << "my name is \" A operator\"" << endl;
	}
};
int main()
{
	A a;
	thread t(a);//以一个类对象为入口函数,需要重载"()"并且没有参数
	return 0;
}

3).用类中的函数成员作为入口函数

class A
{
public:
	void fun()
	{
		cout << "fun" << endl;
	}
};
int main()
{
	A a;
	thread t(&A::fun,&a);//我们构造函数的参数1需要函数的地址,参数2为哪个对象的地址
	system("pause>0");
	return 0;
}

使用

说了这么多,没有给我们看到效果啊,别急下面就是使用(有坑):

1).join函数
作用:主线程等待子线程执行完后再执行主线程,阻塞的。

class A
{
public:
	void fun()
	{
		cout << "fun" << endl;
	}
};
int main()
{
	A a;
	thread t(&A::fun,&a);
	t.join();//启动子线程
	return 0;
}

2).detach函数
作用:主线程和子线程一起执行,当主线程没了,子线程就会交给系统管理了,就失去了我们的控制

class A
{
public:
	void fun()
	{
		cout << "fun" << endl;
	}
};
int main()
{
	A a;
	thread t(&A::fun,&a);
	t.detach();
	return 0;
}

3).joinable函数
作用:判断是否可以join/detach true为可以,false为不可以

class A
{
public:
	void fun()
	{
		cout << "fun" << endl;
	}
};

int main()
{
	A a;
	thread t(&A::fun,&a);
	if(t.joinable())
	{
		cout<<"t 未join/detach"<<endl;
	}
	return 0;
}

detach大坑以及一些其他函数

1.传递字符串指针时,我们可以使用容器:const string,原因:
因为我们不知道主线程执行完后,子线程是否在执行,如果主线程没了,内存被回收了,完了:指针指向的东西变不可控了,所以传他

2.参数也不能有引用(detach情况下):和(1)原因基本一样:
如果真的想传引用,使用函数:std::ref();

3.传递类时,尽量构造临时对象进行传递

其他函数:std::this_thread();
查看此线程的id

智能指针的传递

创建:unique_ptr<类型>(指向的变量)
创建他时需要使用std::move()移动语义函数
入口参数也需要遵守上面讲参数的一些规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人才程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值