1 #include <sys/timerfd.h>
13 int update_timer_exp(struct timer *tm, int timeout)
16 struct itimerspec new_value;
18 clock_gettime(CLOCK_REALTIME, &now);
19 new_value.it_value.tv_sec = now.tv_sec + timeout;
20 new_value.it_value.tv_nsec = now.tv_nsec;
22 new_value.it_interval.tv_sec = timeout;
23 new_value.it_interval.tv_nsec = 0;
25 if (timerfd_settime(tm->fd, TFD_TIMER_ABSTIME, &new_value, NULL) == -1) {
26 _E("timerfd_settime: %s", strerror(errno));
33 struct timer* create_timer(int timeout, void(*cb)(void*), void *user_data)
38 tm = malloc(sizeof(struct timer));
45 tm->user_data = user_data;
46 tm->fd = timerfd_create(CLOCK_REALTIME, 0);
48 _E("timerfd_create failed: %s", strerror(errno));
53 tm->timeout = timeout;
55 ret = update_timer_exp(tm, timeout);
59 _E("update_timer_exp failed");
66 void process_timer(struct timer *tm)
73 s = read(tm->fd, &exp, sizeof(uint64_t));
74 tm->cb(tm->user_data);
77 void delete_timer(struct timer *tm)