(PECL ev >= 0.2.0)
Класс EV является статическим классом, обеспечивая доступ к циклу по умолчанию и некоторым распространенным операциям.
Флаги, передаваемые при создании цикла:
Ev::FLAG_AUTO
задает флагам значение по умолчанию
Ev::FLAG_NOENV
Если этот флаг используется (или программа запускает setuid или setgid), то libev не смотрит на переменную окружения LIBEV_FLAGS. В противном случае (по умолчанию), если найден LIBEV_FLAGS, то он полностью переопределяет флаги. Полезно для тестов производительности и поиска ошибок.
Ev::FLAG_FORKCHECK
Заставляет libev проверять ветвление в каждой итерации, вместо вызова EvLoop::fork() вручную. Это работает путем вызова getpid() на каждой итерации цикла, и, таким образом, это может замедлить работу цикла событий с большим количеством итераций цикла, но обычно не сильно. Этот флаг не может быть переопределен или указан в переменной среды LIBEV_FLAGS.
Ev::FLAG_NOINOTIFY
Если этот флаг указан, то libev не будет пытаться использовать API inotify для своих наблюдателей » ev_stat Флаг может быть полезным для сохранения файловых дескрипторов inotify, в противном случае каждый цикл использующий наблюдателей ev_stat, будет потреблять один дескриптор inotify.
Ev::FLAG_SIGNALFD
Если этот флаг указан,то libev будет пытаться использовать API signalfd для своих наблюдателей » ev_signal (и » ev_child). Это API передает сигналы синхронно, что делает его быстрее и, возможно, позволит получить данные из очереди сигналов, а также позволяет упростить обработку сигналов с помощью потоков, поскольку сигналы корректно блокируются в потоках. Signalfd не используется по умолчанию.
Ev::FLAG_NOSIGMASK
Если указан этот флаг, то libev будет избегать изменения маски сигнала. В частности, это применяется чтобы перед получением сигнала убедиться, что он разблокирован.
Такое поведение полезно для обработки пользовательских сигналов или обработки сигналов только определенных потоков.
Флаги, передаваемые в Ev::run(), или EvLoop::run()
Ev::RUN_NOWAIT
Означает, что цикл событий будет искать и обрабатывать новые события, а также любые ожидающие выполнения события из них, но не будет ждать и блокировать процесс в случае, если не было никаких событий и завершится после одной итерации цикла. Это иногда полезно для опроса и обработки новых событий во время выполнения длительных вычислений, сохраняя при этом возможность взаимодействия с программой.
Ev::RUN_ONCE
Означает, что цикл событий будет искать новые события (ожидая, в случае необходимости) и обрабатывать эти и любые уже ожидающие события из них. Он будет блокировать процесс, пока не поступит по крайней мере одно новое событие (это может быть внутреннее событие libev, поэтому нет никакой гарантии, что будет вызвана заданная callback-функция) и завершится после одной итерации цикла.
Флаги, передаваемые в Ev::stop() , или EvLoop::stop()
Ev::BREAK_CANCEL
Отмена операции прерывания.
Ev::BREAK_ONE
Возвращает самый глубокий запрос Ev::run() (или EvLoop::run() ).
Ev::BREAK_ALL
Завершает все вложенные вызовы Ev::run() (или EvLoop::run() ).
Приоритеты наблюдателей:
Ev::MINPRI
Минимально допустимый приоритет наблюдателя.
Ev::MAXPRI
Максимально допустимый приоритет наблюдателя.
Битовые маски (полученных) событий:
Ev::READ
Дескриптор файла в наблюдателе EvIo доступен для чтения.
Ev::WRITE
Дескриптор файла в наблюдателе EvIo доступен для записи.
Ev::TIMER
EvTimer наблюдает за превышением лимита времени.
Ev::PERIODIC
EvPeriodic наблюдает за превышением лимита времени.
Ev::SIGNAL
Указанный в EvSignal::__construct() сигнал получен.
Ev::CHILD
pid
указанный в
EvChild::__construct()
получен и статус изменен.
Ev::STAT
Путь, указанный в наблюдателе EvStat поменял свои аттрибуты.
Ev::IDLE
Наблюдатель EvIdle работает, когда остальные наблюдатели ничего не делают.
Ev::PREPARE
Все наблюдатели EvPrepare вызваны ровно перед стартом Ev::run() таким образом, наблюдатели EvPrepare являются последними вызванными наблюдателями перед тем, как цикл событий заснет или опросит новые события.
Ev::CHECK
Все наблюдатели EvCheck помещены в очередь сразу после того, как Ev::run() собрал новые события, но до того, как они вызовут какую либо callback-функцию для полученных событий. Таким образом, наблюдатели EvCheck будут вызваны раньше, чем любые другие наблюдатели с таким же либо более низким приоритетом в этой итерации цикла событий.
Ev::EMBED
Встроенный цикл событий, заданный в наблюдателе EvEmbed требует к себе внимания.
Ev::CUSTOM
Никогда не посылается (или иным образом используется) библиотекой libev самостоятельно, но может свободно использоваться пользователями libev для сигнализирующих наблюдателей (т.е. с помощью EvWatcher::feed() ).
Ev::ERROR
Произошла неизвестная ошибка и наблюдатель будет остановлен. Может произойти из-за некорректного запуска наблюдателя, потому, что libev исчерпал лимит по памяти, из-за закрытого дескриптора файла или по какой либо еще причине. Libev считает, что эти ошибки приложения. Также читайте раздел » АНАТОМИЯ НАБЛЮДАТЕЛЕЙ
Флаги бэкенда:
Ev::BACKEND_SELECT
выбор бекенда - select(2)
Ev::BACKEND_POLL
опрос бэкенда - poll(2)
Ev::BACKEND_EPOLL
Специфичный для Linux бэкенд epoll(7) для ядер до и после 2.6.9
Ev::BACKEND_KQUEUE
kqueue - бэкенд используемый в большинстве систем BSD. Наблюдатель EvEmbed может быть использован для всавки одного цикла (с бэкендом kqueue) в другой. Например, можно попытаться создать цикл событий с бэкендом kqueue и использовать его только для сокетов.
Ev::BACKEND_DEVPOLL
Бэкенд Solaris 8. Пока не реализован.
Ev::BACKEND_PORT
Механизм порта событий с хорошим масштабированием в Solaris 10.
Ev::BACKEND_ALL
Пробовать все бэкенды (кроме испорченных).
Не рекомендуется использовать напрямую.
Тут необходимо использовать побитовые операции
(т.е.
Ev::BACKEND_ALL
& ~
Ev::BACKEND_KQUEUE
). Использовать
Ev::recommendedBackends()
, или не задавать никакого бэкенда вообще.
Ev::BACKEND_MASK
Не бэкенд, но маска для выбора всех бит бэкендов из значения
flags
, для
исключения каких либо бэкендов.
(т.е. когда модифицируете переменную окружения
LIBEV_FLAGS).
Замечание:
Для цикла по умолчанию, во время фазы инициализации модуля Ev, регистрируется вызов » ev_loop_fork с помощью pthread_atfork (если таковой имеется).
Замечание:
Есть методы, позволяющие получить доступ к циклу событий по умолчанию в классе Ev (например, Ev::iteration(), Ev::depth() и т.д.). Для пользовательских циклов (созданных с помощью EvLoop::__ construct()) эти значения могут быть доступны через соответствующие свойства и методы класса EvLoop.
Экземпляр цикла событий по умолчению может быть извлечен с помощью метода EvLoop::defaultLoop().