UniSet 2.32.1
|
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()).
bool uniset::CommonEventLoop::async_evrun | ( | EvWatcher * | w, |
size_t | prepareTimeout_msec = 60000 ) |
Асинхронный запуск (запуск в отдельном потоке)
prepareTimeout_msec | - сколько ждать активации, либо функция вернёт false. |
bool uniset::CommonEventLoop::evrun | ( | EvWatcher * | w, |
size_t | prepareTimeout_msec = 60000 ) |
Синхронный запуск. Функция возвращает управление (false), только если запуск не удался, либо был остановлен вызовом evstop();
prepareTimeout_msec | - сколько ждать активации, либо функция вернёт false. |