У меня есть базовый код, который имеет таймер libevent, начатый в течение 480 секунд. После задержки, до истечения срока действия таймера, я хотел найти количество секунд, прошедших в этом таймере., чтобы найти истекшее время в тайне libevent до истечения срока действия таймера
0
A
ответ
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;
}