vitastor/src/timerfd_manager.h

39 lines
933 B
C
Raw Normal View History

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