123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #include <memory>
- #include <list>
- #include <vector>
- #include <mutex>
- typedef struct TimePos{
- int pos_ms;
- int pos_sec;
- int pos_min;
- }TimePos_t;
- typedef struct Event {
- int id;
- void(*cb)(void);
- void* arg;
- TimePos_t timePos;
- int interval;
- }Event_t;
- class TimeWheel {
- typedef std::shared_ptr<TimeWheel> TimeWheelPtr;
- typedef void (*EventCallback_t)(void );
- typedef std::vector<std::list<Event_t>> EventSlotList_t;
- public:
- TimeWheel();
-
- void initTimeWheel(int steps, int maxMin);
- void createTimingEvent(int interval, EventCallback_t callback);
- public:
- static void* loopForInterval(void* arg);
-
- private:
- int getCurrentMs(TimePos_t timePos);
- int createEventId();
- int processEvent(std::list<Event_t> &eventList);
- void getTriggerTimeFromInterval(int interval, TimePos_t &timePos);
- void insertEventToSlot(int interval, Event_t& event);
- EventSlotList_t m_eventSlotList;
- TimePos_t m_timePos;
- pthread_t m_loopThread;
- int m_firstLevelCount;
- int m_secondLevelCount;
- int m_thirdLevelCount;
-
- int m_steps;
- int m_increaseId; // not used
- std::mutex m_mutex;
- };
|