Таймер libevent не срабатывает, когда событие добавляется в уже запущенный цикл - PullRequest
0 голосов
/ 07 февраля 2020

У меня проблема с таймером libevent. Я использую bufferevent в течение достаточно долгого времени, и я знаком с libevent.

У меня есть отдельный поток, который отправляет событие, и он запускается при запуске программы

static void *ev_thread(void *base) {
        while(1) {
                event_base_dispatch(struct event_base *)base);
        }
        return NULL;
}

Эта установка отлично работает с bufferevent.

Однако теперь я попытался использовать таймер следующим образом

struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
struct event *ev = event_new(base, -1, 0, on_timer_callback, NULL);
int rv = event_add(ev, &tv);
printf("rv = %d\n", rv);

Проблема в том, что таймер никогда не срабатывает. Однако, если я вызываю event_base_dispatch () после event_add, таймер срабатывает, хотя и побеждает цель.

Есть идеи, как добавить событие в уже запущенное событие l oop?

...