(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().