C++多线程

启动线程,thread,以及join、joinable、detach、类函数的线程启动

//启动线程案例
#include <thread>
#include <stdio.h>
#include <chrono>
using namespace std;

void worker(int a){
printf{"hello thread. %d\n",a);
this_thread::sleep_for(chrono::milliseconds(1000));//毫秒级等待,等待1秒钟
printf("worker done.\n");
}

class Infer{
public:

	Infer(){
	//Infer在实例化构造的时候会启动一个成员函数的线程
	//这是通过thread 类的等号运算符重载实现的创建线程
	//&Infer取地址
	woker_thread_ = thread(&Infer::infer_worker,this);
	}
private:
	//线程中执行的就是这个内部的infer_worker函数
	void infer_worker(){
	//访问成员变量
	this->worker_thread_;
	//不用写this指针同样也能访问成员变量
	worker_thread_;
	}
private:
	thread worker_thread_;
};



int main(){
//完整的启动线程案例
//thread t(func,args...),t的第一个参数为函数,后面的参数为这个函数的参数, 如果参数传的是引用就要用std::ref()把参数塞进去。
thread t(worker,777);//通过线程启动worker
//t.join();//等待线程结束
// 1.t.join如果不加,会在析构时提示异常,出现core dumped
//         只要线程t启动了,就必须要join
// 2.若t没有启动线程,去执行t.join会异常
//         只要线程t没有启动,一定不能join。thread t就代表没启动线程,因为此时没有要执行的函数传进去。

t.detach();//分离线程,取消管理权,使得线程成为野线程,不建议使用
//3.野线程不需要join,线程交给系统管理。程序退出后(指main函数),所有线程才退出,所以线程中函数有可能都没执行完。

if(t.joinable()) //由于前面1,2两点的原因,所以就可以写成:如果它可以join,那就join
	t.join();
printf("done.\n");
return 0;
}

refer:
C++ thread用法总结(整理)

静态成员函数与非静态成员函数的区别:静态成员函数不能访问类的this指针,原因:静态函数不属于具体的对象。

静态成员函数不可以访问类中的成员变量,及其解决办法

C+±-类的this指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值