19 thread_ = std::thread([&]() {
22 std::unique_lock lock(lock_);
25 std::this_thread::sleep_for(std::chrono::seconds(1));
29 job j = std::move(queue_.top());
33 int sleep_time = j.next_time - current_time;
34 if (sleep_time > 0) std::this_thread::sleep_for(std::chrono::seconds(sleep_time));
35 current_time = j.next_time;
39 j.next_time += j.interval_time;
48 if (thread_.joinable()) thread_.join();
51 template <
class Function,
class... Args>
52 void add(
int interval, Function&&
func, Args&&...args) {
53 add(job{0, interval, std::bind(
func, std::forward<Args>(args)...)});
60 std::function<void()> task;
62 bool operator<(
const job& other)
const {
return next_time > other.next_time; }
66 std::unique_lock lock(lock_);
67 queue_.push(std::move(j));
70 std::priority_queue<job> queue_;
73 std::atomic<bool> running_;
void stop()
Definition: timer.h:46
~timer()
Definition: timer.h:15
timer()
Definition: timer.h:14
void start()
Definition: timer.h:17
void add(int interval, Function &&func, Args &&...args)
Definition: timer.h:52
Definition: algorithm.h:10