在计时器到期之前在libevent计时器中找到经过的时间

时间:2013-12-05 04:20:12

标签: c timer libevent

我有一个基本代码,启动计时器启动480秒。在延迟之后,在计时器到期之前,我想找到该计时器中经过的秒数。

1 个答案:

答案 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;
}