File size: 1,200 Bytes
bb16f10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef PROXYSERVER_TIMER_THREAD_H
#define PROXYSERVER_TIMER_THREAD_H

#include "hv/EventLoopThread.h"

class TimerThread : public hv::EventLoopThread {
public:
    std::atomic<hv::TimerID> 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