// Copyright (c) Vitaliy Filippov, 2019+ // License: VNPL-1.1 or GNU GPL-2.0+ (see README.md for details) #pragma once #include #include #include struct timerfd_timer_t { int id; uint64_t millis; timespec start, next; bool repeat; std::function callback; }; class timerfd_manager_t { int wait_state = 0; int timerfd; int nearest = -1; int id = 1; std::vector timers; void inc_timer(timerfd_timer_t & t); void set_nearest(); void trigger_nearest(); void handle_readable(); public: std::function)> set_fd_handler; timerfd_manager_t(std::function)> set_fd_handler); ~timerfd_manager_t(); int set_timer(uint64_t millis, bool repeat, std::function callback); void clear_timer(int timer_id); };