利用c++11特性 做的一个线程类
基类
#pragma once
#include <iostream>
#include <thread>
#include <functional>
/*
* 工作线程
*/
class CxWorkThread
{
public:
CxWorkThread();
~CxWorkThread();
public:
/*
* 初始化
*/
virtual int Init();
/*
* 开始
*/
virtual int Start();
/*
* 停止
*/
virtual int Stop();
/*
* 定时检测是否需要重启
*/
virtual int IsNeedReStart();
/*
* 任务
*/
virtual int Task();
/*
* 运行
*/
virtual int Run()=0;
protected:
/*
* 运行状态
*/
bool m_bRunning;
/*
* 启动标志
*/
int m_n4Start;
/*
* 最后一次运行时间
*/
__time64_t m_lasttime;
/*
* 线程
*/
std::thread* m_pThread;
};
#include "stdafx.h"
#include "CxWorkThread.h"
CxWorkThread::CxWorkThread()
{
m_lasttime = 0;
m_n4Start = 0;
m_bRunning = false;
m_pThread = nullptr;
}
CxWorkThread::~CxWorkThread()
{
Stop();
}
int CxWorkThread::Init()
{
m_bRunning = false;
m_pThread = nullptr;
m_n4Start = 0;
CTime tm = CTime::GetCurrentTime();
m_lasttime = tm.GetTime();
return 0;
}
int CxWorkThread::Start()
{
// 关闭
Stop();
// 开启线程
m_bRunning = true;
m_n4Start = 1;
if (nullptr == m_pThread)
m_pThread = new std::thread(std::bind(&CxWorkThread::Run, this));
return 0;
}
int CxWorkThread::Stop()
{
m_bRunning = false;
m_n4Start = 0;
if (nullptr == m_pThread)
return 0;
m_pThread->join();
delete m_pThread, m_pThread = nullptr;
return 0;
}
int CxWorkThread::IsNeedReStart()
{
if (0 == m_n4Start)
return 0;
CTime nowtime = CTime::GetCurrentTime();
CTimeSpan sp = nowtime - CTime(m_lasttime);
// 重启
if (sp.GetTotalMinutes() > 1)
Start();
return 0;
}
int CxWorkThread::Task()
{
//while (m_bRunning)
//{
// // 线程运行
// Run();
// // 更新运行时间
// CTime tm = CTime::GetCurrentTime();
// m_lasttime = tm.GetTime();
// //
// Sleep(2);
//}
return 0;
}
子类继承该类,重写Run方法,调用start即可