1
0

module_i_thread.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef MODULE_I_THREAD_H
  2. #define MODULE_I_THREAD_H
  3. #include<atomic>
  4. #include<boost/thread.hpp>
  5. #include<mutex>
  6. #include<log.h>
  7. /**
  8. * @brief 线程接口类,重写run函数,改变睡眠时间 sleep_ms
  9. */
  10. class i_thread
  11. {
  12. public:
  13. i_thread()
  14. {
  15. sleep_ms=5*1000;
  16. }
  17. virtual ~i_thread(){}
  18. /**
  19. * @brief 启动线程
  20. */
  21. void start()
  22. {
  23. _thread_flag=true;
  24. _thread_handler=boost::thread(&i_thread::thread_proc, this);
  25. }
  26. /**
  27. * @brief 终止线程
  28. */
  29. void stop()
  30. {
  31. _thread_flag=false;
  32. _thread_handler.interrupt();
  33. }
  34. ///线程睡眠时间 毫秒
  35. std::atomic<int> sleep_ms;
  36. protected:
  37. /// 互斥量
  38. std::mutex _mutex;
  39. /**
  40. * @brief 线程函数
  41. */
  42. virtual void run(){}
  43. private:
  44. /// 线程句柄
  45. boost::thread _thread_handler;
  46. /// 线程标志
  47. std::atomic<bool> _thread_flag;
  48. void thread_proc()
  49. {
  50. while(_thread_flag)
  51. {
  52. try
  53. {
  54. run();
  55. boost::this_thread::sleep_for(boost::chrono::milliseconds(sleep_ms));
  56. }
  57. catch (const boost::thread_interrupted&)
  58. {
  59. }
  60. catch(const std::exception&e)
  61. {
  62. log_error("捕获到异常:%s",e.what());
  63. }
  64. catch(...)
  65. {
  66. log_error("捕获到未知异常");
  67. }
  68. }
  69. }
  70. };
  71. #endif // MODULE_I_THREAD_H