2013-12-05 5 views
0

У меня есть базовый код, который имеет таймер libevent, начатый в течение 480 секунд. После задержки, до истечения срока действия таймера, я хотел найти количество секунд, прошедших в этом таймере., чтобы найти истекшее время в тайне libevent до истечения срока действия таймера

ответ

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