1
0

TimerThread.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. printf("TimerThread::setTimer\n");
  20. TimerID timerID = ++nextTimerID;
  21. loop()->runInLoop(std::bind(&EventLoop::setTimer, loop(), timeout_ms, cb, repeat, timerID));
  22. return timerID;
  23. }
  24. // alias javascript setTimeout, setInterval
  25. TimerID setTimeout(int timeout_ms, TimerCallback cb) {
  26. return setTimer(timeout_ms, cb, 1);
  27. }
  28. TimerID setInterval(int interval_ms, TimerCallback cb) {
  29. return setTimer(interval_ms, cb, INFINITE);
  30. }
  31. void killTimer(TimerID timerID) {
  32. loop()->runInLoop(std::bind(&EventLoop::killTimer, loop(), timerID));
  33. }
  34. void resetTimer(TimerID timerID, int timeout_ms = 0) {
  35. loop()->runInLoop(std::bind(&EventLoop::resetTimer, loop(), timerID, timeout_ms));
  36. }
  37. };
  38. } // end namespace hv
  39. #endif // HV_TIMER_THREAD_HPP_