#ifndef PROXYSERVER_TIMER_THREAD_H #define PROXYSERVER_TIMER_THREAD_H #include "hv/EventLoopThread.h" class TimerThread : public hv::EventLoopThread { public: std::atomic nextTimerID; TimerThread() : EventLoopThread() { nextTimerID = 0; start(); } virtual ~TimerThread() { stop(); join(); } public: // setTimer, setTimeout, killTimer, resetTimer thread-safe hv::TimerID setTimer(int timeout_ms, hv::TimerCallback cb, uint32_t repeat = INFINITE) { hv::TimerID timerID = ++nextTimerID; loop()->setTimerInLoop(timeout_ms, cb, repeat, timerID); return timerID; } // alias javascript setTimeout, setInterval hv::TimerID setTimeout(int timeout_ms, hv::TimerCallback cb) { return setTimer(timeout_ms, cb, 1); } hv::TimerID setInterval(int interval_ms, hv::TimerCallback cb) { return setTimer(interval_ms, cb, INFINITE); } void killTimer(hv::TimerID timerID) { loop()->killTimer(timerID); } void resetTimer(hv::TimerID timerID, int timeout_ms = 0) { loop()->resetTimer(timerID, timeout_ms); } }; #endif // PROXYSERVER_TIMER_THREAD_H