C++多线程(三):使用类和lambda表达式创建线程

使用类创建线程

#include <iostream>
#include <windows.h>
#include <thread>

using namespace std;

//创建子线程类
class myClassThread
{
public:
	void operator()()
	{
		cout << "我的class线程开始执行" << endl;
		Sleep(1000);
		cout << "我的class线程执行结束" << endl;
	}

};

int main()
{
	myClassThread classThread;
	thread threadOFclass(classThread);
	if (threadOFclass.joinable())
	{
		threadOFclass.join();
	}
	
    cout << "主线程执行20%\n";
	Sleep(1000);
	cout << "主线程执行40%\n";
	Sleep(1000);
	cout << "主线程执行60%\n";
	Sleep(1000);
	cout << "主线程执行80%\n";
	Sleep(1000);
	cout << "主线程结束100%\n";
	return 0; 
}

运行结果:

使用类创建时,如果类中有引用或者指针,必须使用join(),等待子线程处理完成之后再执行主线程程序,否则会导致指针或引用所对应内容出现错误。

如果类中没有引用或者指针,那么当使用detach()时:子线程中的类的实例是从主线程中复制过去的,主线程执行完毕不会对子线程的数据产生影响。

使用lambda表达式创建线程

    auto myLambdaThread = [] {
		cout << "lambda表达式线程开始" << endl;
		Sleep(1000);
		cout << "lambda表达式线程结束" << endl;
	};

	thread threadOFlambda(myLambdaThread);//classThread是一个可调用对象
	if (threadOFlambda.joinable())
	{
		threadOFlambda.join();
	}

主程序中定义lambda表达式,然后使用thread创建线程。

结果是:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值