В libevent
Я добавил следующий код:
while (run) {
event_base_loop(base, EVLOOP_NONBLOCK | EVLOOP_ONCE);
}
Если я сравню это со следующим:
event_base_dispatch(base);
Эти два утверждения равны?
Нет, event_base_dispatch(base)
вызов эквивалентен event_base_loop(base, 0)
Это означает, что он не остановится после первой серии событий (например, event_base_loop
с EVLOOP_ONCE
нет) и не возвращаются немедленно, если событие не готово (например, event_base_loop
с EVLOOP_NONBLOCK
делает).
Возможно, вы захотите прочесть замечательную книгу о свободе, написанную Ником Мэтьюсоном: http://www.wangafu.net/~nickm/libevent-book/Ref3_eventloop.html
Других решений пока нет …