UniSet
2.6.0
|
The CommonEventLoop class Реализация механизма "один eventloop, много подписчиков" (libev). Создаётся один CommonEventLoop который обслуживает множество EvWatcher-ов. Каждый класс который хочет подключиться к основному loop, должен наследоваться от класса Watcher и при необходимости переопределить функции evprepare и evfinish. EvWatcher добавляется(запускается) evrun(..) и останавливается функцией evstop(..). При этом фактически eventloop запускается при первом вызове evrun(), а останавливается при отключении последнего EvWatcher. Подробнее...
Открытые члены | |
bool | evIsActive () const noexcept |
bool | evrun (EvWatcher *w, bool thread=true, size_t waitPrepareTimeout_msec=8000) |
bool | evstop (EvWatcher *w) |
const ev::loop_ref | evloop () noexcept |
size_t | size () const |
The CommonEventLoop class Реализация механизма "один eventloop, много подписчиков" (libev). Создаётся один CommonEventLoop который обслуживает множество EvWatcher-ов. Каждый класс который хочет подключиться к основному loop, должен наследоваться от класса Watcher и при необходимости переопределить функции evprepare и evfinish. EvWatcher добавляется(запускается) evrun(..) и останавливается функцией evstop(..). При этом фактически eventloop запускается при первом вызове evrun(), а останавливается при отключении последнего EvWatcher.
Некоторые детали: Т.к. evprepare необходимо вызывать из потока в котором крутится event loop (иначе libev не работает), а функция run() в общем случае вызывается "откуда угодно" и может быть вызвана в том числе уже после запуска event loop, то задействован механизм асинхронного уведомления (см. evprep, onPrepapre) и ожидания на condition_variable, когда произойдёт инициализация (см. реализацию evrun()).
bool uniset::CommonEventLoop::evrun | ( | EvWatcher * | w, |
bool | thread = true , |
||
size_t | waitPrepareTimeout_msec = 8000 |
||
) |
thread | - создать отдельный (асинхронный) поток для event loop. Если thread=false - функция не вернёт управление и будет ждать завершения работы ( см. evstop()) |
waitPrepareTimeout_msec | - сколько ждать активации, либо функция вернёт false. Даже если thread = false, но wather не сможет быть "активирован" функция вернёт управление с return false. |