tw.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <memory>
  2. #include <list>
  3. #include <vector>
  4. #include <mutex>
  5. typedef struct TimePos{
  6. int pos_ms;
  7. int pos_sec;
  8. int pos_min;
  9. }TimePos_t;
  10. typedef struct Event {
  11. int id;
  12. void(*cb)(void);
  13. void* arg;
  14. TimePos_t timePos;
  15. int interval;
  16. }Event_t;
  17. class TimeWheel {
  18. typedef std::shared_ptr<TimeWheel> TimeWheelPtr;
  19. typedef void (*EventCallback_t)(void );
  20. typedef std::vector<std::list<Event_t>> EventSlotList_t;
  21. public:
  22. TimeWheel();
  23. void initTimeWheel(int steps, int maxMin);
  24. void createTimingEvent(int interval, EventCallback_t callback);
  25. public:
  26. static void* loopForInterval(void* arg);
  27. private:
  28. int getCurrentMs(TimePos_t timePos);
  29. int createEventId();
  30. int processEvent(std::list<Event_t> &eventList);
  31. void getTriggerTimeFromInterval(int interval, TimePos_t &timePos);
  32. void insertEventToSlot(int interval, Event_t& event);
  33. EventSlotList_t m_eventSlotList;
  34. TimePos_t m_timePos;
  35. pthread_t m_loopThread;
  36. int m_firstLevelCount;
  37. int m_secondLevelCount;
  38. int m_thirdLevelCount;
  39. int m_steps;
  40. int m_increaseId; // not used
  41. std::mutex m_mutex;
  42. };