创建CThread类,封装自std::thread.
#ifndef THREAD_H_
#define THREAD_H_
#include <thread>
#include <iostream>
#include <utility>
#include <system_error>
class CThread
{
public:
CThread() : _bRun(false){}
CThread(CThread& src): _bRun(src._bRun), _thread(move(src._thread)){src._bRun = false;}
virtual ~CThread()
{
if(_thread.joinable())
_thread.detach();
}
template <typename F, typename... Args>
bool Start(F&& f, Args&&... args)
{
if(_bRun) return false;
try
{
_bRun = true;
_thread = std::thread(std::forward<F>(f), std::forward<Args>(args)...);
}
catch(std::system_error& ex)
{
std::cout << "start thread fails:" << ex.what() << std::endl;
}
catch(...)
{
std::cout << "start thread fails" << std::endl;
}
return _bRun;
}
bool IsRun() const {return _bRun;}
void Join()
{
bool bRun = _bRun;
_bRun = false;
if(bRun)
_thread.join();
}
private:
bool _bRun;
std::thread _thread;
};
#endif /* THREAD_H_ */
使用方法:
CThread _thread;
</pre><pre name="code" class="cpp">//void参数
_thread.Start(ThreadFunc1, nullptr);
void ThreadFunc1(void* pVoid)
{
}
</pre><pre name="code" class="cpp">//int参数
void ThreadFunc2(int m)
{
}
//多参数
void ThreadFunc3(int m, int n)
{
}