1.线程启动,detach,join

join

#include <iostream>
#include <thread>
using namespace std;

void myPrint()
{
	cout << "我的线程开始运行" << endl;
	//-------------
	//-------------
	cout << "我的线程运行完毕" << endl;
	return;
}

int main()
{
	//(1)创建了线程,线程执行起点(入口)是myPrint;(2)执行线程
	thread myThread(myPrint);

	//(2)阻塞主线程并等待myPrint执行完,当myPrint执行完毕,join()就执行完毕,主线程继续往下执行
	//join意为汇合,子线程和主线程回合
	myThread.join();

	//设置断点可看到主线程等待子线程的过程
	//F11逐语句,就是每次执行一行语句,如果碰到函数调用,它就会进入到函数里面
	//F10逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行

	//(3)传统多线程程序中,主线程要等待子线程执行完毕,然后自己才能向下执行
	//detach:分离,主线程不再与子线程汇合,不再等待子线程
	//detach后,子线程和主线程失去关联,驻留在后台,由C++运行时库接管
	//myThread.detach();

	//(4)joinable()判断是否可以成功使用join()或者detach()
	//如果返回true,证明可以调用join()或者detach()
	//如果返回false,证明调用过join()或者detach(),join()和detach()都不能再调用了
	if (myThread.joinable())
	{
		cout << "可以调用可以调用join()或者detach()" << endl;
	}
	else
	{
		cout << "不能调用可以调用join()或者detach()" << endl;
	}

	cout << "Hello World!" << endl;
	return 0;
}

datach

#include <iostream>
#include <thread>
using namespace std;

class A {
public:
	void operator ()() {//不传参数
		cout << "子线程执行1" << endl;
		cout << "子线程执行2" << endl;
		cout << "子线程执行3" << endl;
		cout << "子线程执行4" << endl;
		cout << "子线程执行5" << endl;
	}
};

int main()
{
	//(1)创建了线程,线程执行起点(入口)是myPrint;(2)执行线程
	A a;
	thread myThread(a);//传入函数对象

	//各走各的,主线程先结束了,子线程在后台
	myThread.detach();
	cout << "Hello World!" << endl;

	//输出:子线程执行1Hello World!
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值