12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #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_ */
|