#ifndef THREAD_H_ #define THREAD_H_ #include #include #include #include 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 bool Start(F&& f, Args&&... args) { if(_bRun) return false; try { _bRun = true; _thread = std::thread(std::forward(f), std::forward(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_ */