Re: Libevent - запуск основного цикла
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.12.21 13:29
Оценка:
Здравствуйте, Optimus1, Вы писали:

O>Я не могу понять, я правильно понимаю, что EVLOOP_ONCE — говорит event_base_loop — ждать пока не появится хотя бы одно событие, и если появилось или было в момент запуска(одно или более) то обработать их, если события в очереди закончились, то завершить свою работу ??


Да, это типовая логика.

O> event_base_loop(Event_base, EVLOOP_ONCE ); //запускаем цикл, который теоретически, если я правильно понял — должен дождаться хотя бы одного события


А вы хоть что-то ему дали? Насколько я вижу — ни сокета, ни таймера.
В этом случае он вполне может считать, что раз пустой набор ожидания — лучше сразу выйти — это тоже типовой вариант в подобных библиотеках.

Сделайте, например, UDP сокет и подкиньте ему ожидание на чтение.

O>И позвольте пожалуйста еще один вопрос: а, чем собственно EVLOOP_NONBLOCK отличается от EVLOOP_ONCE ? Тем, что, если во время запуска, если событий в очереди нет — то цикл ждать их ен будет и сразу завершит работу ?


Да.

Но вообще libevent — это наиболее неудачный, как по мне, пример такой библиотеки — самый корявый и негодный API среди всех.
За красивой и удобной реализацией идите или к libuv хотя бы, libev, или к ISC eventlib...
Для C++ можно сразу смотреть на boost.asio (если проактивность не мешает).
The God is real, unless declared integer.
Отредактировано 21.12.2021 13:32 netch80 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.