UniSet  2.6.0
Открытые члены | Полный список членов класса
Класс uniset::CommonEventLoop

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 
)
Возвращает
TRUE - если всё удалось. return актуален только для случая когда thread = true
Аргументы
thread- создать отдельный (асинхронный) поток для event loop. Если thread=false - функция не вернёт управление и будет ждать завершения работы ( см. evstop())
waitPrepareTimeout_msec- сколько ждать активации, либо функция вернёт false. Даже если thread = false, но wather не сможет быть "активирован" функция вернёт управление с return false.
bool uniset::CommonEventLoop::evstop ( EvWatcher w)
Возвращает
TRUE - если это был последний EvWatcher и loop остановлен