C++线程常见包装类实现

C++多线程不如Java那样启动和停止线程那么优雅,如何做到开启线程像Java那样呢?本文将介绍常见的封装C++11线程方式。
线程和其他任务一个样,开启,执行,结束。在CPP当中,执行任务这这一过程就相当于一个回调函数一样,在Java当中有开启线程的方式继承Thread和实现Runnable接口,哈哈哈哈哈哈,一下回到大二听贾老师了属于是,那我们就来实现Java当中的集成Thread这种方式。

定义接口

  1. Start ()
  2. Stop()
  3. Main()

这里的Start()和Stop()函数都是virtual ,可被重载,有自己的实现方式,但是Main()肯定不能有默认的实现方式,所以Main(),肯定是是一个纯虚函数。

多线程时,经常涉及到资源的互斥访问,因此添加信号量或者信号量也是很有必要的,这里我使用C++11的mutex。MyThread的头文件为:

#pragma once
#include <thread>
#include <mutex>
class MyThread
{
public:
	virtual void Start();
	virtual void Stop();
protected:
	virtual void Main() = 0;
protected:
	std::thread th_;
	bool is_exit_;
	std::mutex mtx_;
};


这里定义的is_exit_是停止信号。

实现

#include "my_thread.h"
using namespace std;
void MyThread::Start()
{
	is_exit_ = false;
	//启动线程
	th_ = thread(&MyThread::Main, this);
}

void MyThread::Stop()
{
	is_exit_ = true;
	if (th_.joinable()) //判断子线程是否可以同步等待
	{
		th_.join(); //同步等待子线程
	}
}

C++11线程的join可以理解为加入到主线程或者合并到主线程。
定义的Main()函数要在继承类中实现:virtual void Main();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

顾文繁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值