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

The CommonEventLoop class Реализация механизма "один eventloop, много подписчиков" (libev). Создаётся один CommonEventLoop который обслуживает множество EvWatcher-ов. Каждый класс который хочет подключиться к основному loop, должен наследоваться от класса Watcher и при необходимости переопределить функции evprepare и evfinish. EvWatcher добавляется(запускается) evrun(..) и останавливается функцией evstop(..). При этом фактически eventloop запускается при первом вызове evrun(), а останавливается при отключении последнего EvWatcher. Подробнее...

#include <CommonEventLoop.h>

Открытые члены

bool evIsActive () const noexcept
 
bool evrun (EvWatcher *w, size_t prepareTimeout_msec=60000)
 
bool async_evrun (EvWatcher *w, size_t prepareTimeout_msec=60000)
 
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, onPrepare) и ожидания на condition_variable, когда произойдёт инициализация (см. реализацию evrun()).

Методы

◆ async_evrun()

bool uniset::CommonEventLoop::async_evrun ( EvWatcher * w,
size_t prepareTimeout_msec = 60000 )

Асинхронный запуск (запуск в отдельном потоке)

Возвращает
TRUE - если всё удалось.
Аргументы
prepareTimeout_msec- сколько ждать активации, либо функция вернёт false.

◆ evrun()

bool uniset::CommonEventLoop::evrun ( EvWatcher * w,
size_t prepareTimeout_msec = 60000 )

Синхронный запуск. Функция возвращает управление (false), только если запуск не удался, либо был остановлен вызовом evstop();

Аргументы
prepareTimeout_msec- сколько ждать активации, либо функция вернёт false.

◆ evstop()

bool uniset::CommonEventLoop::evstop ( EvWatcher * w)
Возвращает
TRUE - если это был последний EvWatcher и loop остановлен