我有一个基本代码,启动计时器启动480秒。在延迟之后,在计时器到期之前,我想找到该计时器中经过的秒数。
答案 0 :(得分:1)
在libevent中没有一个函数可以做到这一点,并且添加一个函数并不是非常容易:现在,计时器在它们到期时记住 ,而不是时他们被添加。
(如果你想知道计时器什么时候到期,你可以使用event_pending()函数来实现。)
你可以很容易地伪装它,使用类似这样的(未经测试的)代码:
struct annotated_timer {
struct timeval tv;
struct event *ev;
};
...
struct annotated_timer *
annotated_timer_new(void (*cb)(evutil_socket_t, short, void*), void *arg) {
struct annotated_timer *at;
if (!(at = malloc(sizeof(*at))))
return NULL;
if (!(at->ev = event_new(-1, 0, cb, arg))) {
free(at);
return NULL;
}
return at;
}
void
annotated_timer_add(struct annotated_timer *at, const struct timeval *tv) {
evutil_gettimeofday(&at->tv, NULL);
event_add(&at->ev, tv);
}
int
annotated_timer_get_time_waiting(struct annotated_timer *at, struct timeval *tv_out) {
if (! event_pending(&at->ev, EV_TIMER, NULL))
return -1;
struct timeval now;
evutil_gettimeofday(&now, NULL);
evutil_timersub(tv_out, &now, &at->tv);
return 0;
}