1
0

TimerThread.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #ifndef HV_TIMER_THREAD_HPP_
  2. #define HV_TIMER_THREAD_HPP_
  3. #include "EventLoopThread.h"
  4. namespace hv {
  5. class TimerThread : public EventLoopThread {
  6. public:
  7. std::atomic<TimerID> nextTimerID;
  8. TimerThread() : EventLoopThread() {
  9. nextTimerID = 0;
  10. start();
  11. }
  12. virtual ~TimerThread() {
  13. stop();
  14. join();
  15. }
  16. public:
  17. // setTimer, setTimeout, killTimer, resetTimer thread-safe
  18. TimerID setTimer(int timeout_ms, TimerCallback cb, uint32_t repeat = INFINITE) {
  19. TimerID timerID = ++nextTimerID;
  20. loop()->setTimerInLoop(timeout_ms, cb, repeat, timerID);
  21. return timerID;
  22. }
  23. // alias javascript setTimeout, setInterval
  24. TimerID setTimeout(int timeout_ms, TimerCallback cb) {
  25. return setTimer(timeout_ms, cb, 1);
  26. }
  27. TimerID setInterval(int interval_ms, TimerCallback cb) {
  28. return setTimer(interval_ms, cb, INFINITE);
  29. }
  30. void killTimer(TimerID timerID) {
  31. loop()->killTimer(timerID);
  32. }
  33. void resetTimer(TimerID timerID, int timeout_ms = 0) {
  34. loop()->resetTimer(timerID, timeout_ms);
  35. }
  36. };
  37. } // end namespace hv
  38. #endif // HV_TIMER_THREAD_HPP_