mirror of
https://github.com/php/doc-ru.git
synced 2026-03-23 23:32:16 +01:00
786 lines
30 KiB
XML
786 lines
30 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: b4fbf4434abeca44c58575ff3967e5640f7877d5 Maintainer: rjhdby Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.ev" role="class">
|
||
<title>Класс Ev</title>
|
||
<titleabbrev>Ev</titleabbrev>
|
||
<partintro>
|
||
<!-- {{{ Ev intro -->
|
||
<section xml:id="ev.intro">
|
||
&reftitle.intro;
|
||
<simpara>
|
||
Класс EV — статический класс, который обеспечивает доступ к циклу
|
||
по умолчанию и некоторым общим операциям.
|
||
</simpara>
|
||
</section>
|
||
<!-- }}} -->
|
||
<section xml:id="ev.synopsis">
|
||
&reftitle.classsynopsis;
|
||
|
||
<!-- {{{ Synopsis -->
|
||
<classsynopsis>
|
||
<ooclass>
|
||
<classname>Ev</classname>
|
||
</ooclass>
|
||
<!-- {{{ Class synopsis -->
|
||
<classsynopsisinfo>
|
||
<ooclass>
|
||
<modifier>final</modifier>
|
||
<classname>Ev</classname>
|
||
</ooclass>
|
||
</classsynopsisinfo>
|
||
<!-- }}} -->
|
||
<classsynopsisinfo role="comment">&Constants;</classsynopsisinfo>
|
||
<!--{{{-->
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.flag-auto">Ev::FLAG_AUTO</varname>
|
||
<initializer>0</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.flag-noenv">Ev::FLAG_NOENV</varname>
|
||
<initializer>16777216</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.flag-forkcheck">Ev::FLAG_FORKCHECK</varname>
|
||
<initializer>33554432</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.flag-noinotify">Ev::FLAG_NOINOTIFY</varname>
|
||
<initializer>1048576</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.flag-signalfd">Ev::FLAG_SIGNALFD</varname>
|
||
<initializer>2097152</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.flag-nosigmask">Ev::FLAG_NOSIGMASK</varname>
|
||
<initializer>4194304</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.run-nowait">Ev::RUN_NOWAIT</varname>
|
||
<initializer>1</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.run-once">Ev::RUN_ONCE</varname>
|
||
<initializer>2</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.break-cancel">Ev::BREAK_CANCEL</varname>
|
||
<initializer>0</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.break-one">Ev::BREAK_ONE</varname>
|
||
<initializer>1</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.break-all">Ev::BREAK_ALL</varname>
|
||
<initializer>2</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.minpri">Ev::MINPRI</varname>
|
||
<initializer>-2</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.maxpri">Ev::MAXPRI</varname>
|
||
<initializer>2</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.read">Ev::READ</varname>
|
||
<initializer>1</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.write">Ev::WRITE</varname>
|
||
<initializer>2</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.timer">Ev::TIMER</varname>
|
||
<initializer>256</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.periodic">Ev::PERIODIC</varname>
|
||
<initializer>512</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.signal">Ev::SIGNAL</varname>
|
||
<initializer>1024</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.child">Ev::CHILD</varname>
|
||
<initializer>2048</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.stat">Ev::STAT</varname>
|
||
<initializer>4096</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.idle">Ev::IDLE</varname>
|
||
<initializer>8192</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.prepare">Ev::PREPARE</varname>
|
||
<initializer>16384</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.check">Ev::CHECK</varname>
|
||
<initializer>32768</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.embed">Ev::EMBED</varname>
|
||
<initializer>65536</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.custom">Ev::CUSTOM</varname>
|
||
<initializer>16777216</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.error">Ev::ERROR</varname>
|
||
<initializer>2147483648</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.backend-select">Ev::BACKEND_SELECT</varname>
|
||
<initializer>1</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.backend-poll">Ev::BACKEND_POLL</varname>
|
||
<initializer>2</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.backend-epoll">Ev::BACKEND_EPOLL</varname>
|
||
<initializer>4</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.backend-kqueue">Ev::BACKEND_KQUEUE</varname>
|
||
<initializer>8</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.backend-devpoll">Ev::BACKEND_DEVPOLL</varname>
|
||
<initializer>16</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.backend-port">Ev::BACKEND_PORT</varname>
|
||
<initializer>32</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.backend-all">Ev::BACKEND_ALL</varname>
|
||
<initializer>63</initializer>
|
||
</fieldsynopsis>
|
||
<fieldsynopsis>
|
||
<modifier>const</modifier>
|
||
<type>int</type>
|
||
<varname linkend="ev.constants.backend-mask">Ev::BACKEND_MASK</varname>
|
||
<initializer>65535</initializer>
|
||
</fieldsynopsis>
|
||
<!--}}}-->
|
||
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.ev')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])"/>
|
||
</classsynopsis>
|
||
<!-- }}} -->
|
||
</section>
|
||
<!-- {{{ Ev constants -->
|
||
<section xml:id="ev.constants">
|
||
&reftitle.constants;
|
||
|
||
<para xml:id="ev.constants.loop-flags">
|
||
Флаги, передаваемые при создании цикла:
|
||
<!--{{{-->
|
||
<variablelist>
|
||
<varlistentry xml:id="ev.constants.flag-auto">
|
||
<term>
|
||
<constant>Ev::FLAG_AUTO</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Задаёт флагам значение по умолчанию.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.flag-noenv">
|
||
<term>
|
||
<constant>Ev::FLAG_NOENV</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Если флаг используется (или программа запускает флаг доступа пользователя setuid или флаг доступа группы setgid),
|
||
то модуль <literal>libev</literal> не смотрит на переменную окружения
|
||
<varname>LIBEV_FLAGS</varname>. Иначе (по умолчанию), если модуль нашёл переменную окружения
|
||
<varname>LIBEV_FLAGS</varname>, то он полностью переопределяет флаги.
|
||
Полезно для тестов производительности и поиска ошибок.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.flag-forkcheck">
|
||
<term>
|
||
<constant>Ev::FLAG_FORKCHECK</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Заставляет модуль libev проверять ветвление в каждой итерации, вместо вызова
|
||
метода <methodname>EvLoop::fork</methodname> вручную. Это работает путём вызова
|
||
<literal>getpid()</literal> на каждой итерации цикла, и, таким образом, это может
|
||
замедлить работу цикла событий с большим количеством итераций цикла, но обычно не
|
||
сильно. Этот флаг нельзя переопределять или указывать в переменной среды
|
||
<varname>LIBEV_FLAGS</varname>.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.flag-noinotify">
|
||
<term>
|
||
<constant>Ev::FLAG_NOINOTIFY</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Если этот флаг указали, модуль <literal>libev</literal>
|
||
не будет пытаться использовать API <literal>inotify</literal> для своих наблюдателей
|
||
<link xlink:href="&url.ev.stat;">ev_stat</link>
|
||
Флаг бывает полезным для сохранения файловых дескрипторов inotify,
|
||
иначе каждый цикл, который использует наблюдателей <literal>ev_stat</literal>,
|
||
будет потреблять один дескриптор <literal>inotify</literal>.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.flag-signalfd">
|
||
<term>
|
||
<constant>Ev::FLAG_SIGNALFD</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Если флаг указали, модуль <literal>libev</literal>
|
||
будет пытаться использовать API <literal>signalfd</literal>
|
||
для своих наблюдателей
|
||
<link xlink:href="&url.ev.signal;">ev_signal</link>
|
||
(и <link xlink:href="&url.ev.child;">ev_child</link>).
|
||
API передаёт сигналы синхронно, что делает его быстрее и, возможно, даст
|
||
получить данные из очереди сигналов, а также упрощает обработку сигналов
|
||
через потоки, поскольку сигналы корректно блокируются в потоках.
|
||
<literal>Signalfd</literal> не используется по умолчанию.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.flag-nosigmask">
|
||
<term>
|
||
<constant>Ev::FLAG_NOSIGMASK</constant>
|
||
</term>
|
||
|
||
<listitem>
|
||
<simpara>
|
||
Если указали флаг, модуль <literal>libev</literal>
|
||
будет избегать изменения маски сигнала. В частности, это применяется, чтобы перед
|
||
получением сигнала убедиться, что он разблокирован.
|
||
</simpara>
|
||
<simpara>
|
||
Такое поведение полезно для обработки пользовательских сигналов или обработки
|
||
сигналов только конкретных потоков.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
<!--}}}-->
|
||
<para xml:id="ev.constants.run-flags">
|
||
Флаги, которые передают в метод <methodname>Ev::run</methodname>
|
||
или метод <methodname>EvLoop::run</methodname>
|
||
<!--{{{-->
|
||
<variablelist>
|
||
<varlistentry xml:id="ev.constants.run-nowait">
|
||
<term>
|
||
<constant>Ev::RUN_NOWAIT</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Означает, что цикл событий будет искать и обрабатывать новые события, а также любые
|
||
ожидающие выполнения события из них, но не будет ждать и блокировать процесс
|
||
в случае, если не было никаких событий и завершится после одной итерации цикла.
|
||
Это иногда полезно для опроса и обработки новых событий во время выполнения
|
||
длительных вычислений, сохраняя при этом возможность взаимодействия с программой.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.run-once">
|
||
<term>
|
||
<constant>Ev::RUN_ONCE</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Означает, что цикл событий будет искать новые события (ожидая, если потребуется)
|
||
и обрабатывать эти и любые уже ожидающие события из них.
|
||
Цикл событий будет блокировать процесс, пока не поступит хотя бы одно новое событие
|
||
(им может оказаться внутреннее событие модуля libev, поэтому нет никакой гарантии, что будет
|
||
вызвана заданная callback-функция) и завершится после одной итерации цикла.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
<!--}}}-->
|
||
<para xml:id="ev.constants.break-flags">
|
||
Флаги, которые передают
|
||
в метод <methodname>Ev::stop</methodname>
|
||
или метод <methodname>EvLoop::stop</methodname>
|
||
<!--{{{-->
|
||
<variablelist>
|
||
<varlistentry xml:id="ev.constants.break-cancel">
|
||
<term>
|
||
<constant>Ev::BREAK_CANCEL</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Отмена операции прерывания.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.break-one">
|
||
<term>
|
||
<constant>Ev::BREAK_ONE</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Возвращает самый глубокий запрос
|
||
метода <methodname>Ev::run</methodname>
|
||
(или метода <methodname>EvLoop::run</methodname>).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.break-all">
|
||
<term>
|
||
<constant>Ev::BREAK_ALL</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Завершает все вложенные вызовы
|
||
метода <methodname>Ev::run</methodname>
|
||
(или метода <methodname>EvLoop::run</methodname>).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
<!--}}}-->
|
||
<para xml:id="ev.constants.watcher-pri">
|
||
Приоритеты наблюдателей:
|
||
<!--{{{-->
|
||
<variablelist>
|
||
<varlistentry xml:id="ev.constants.minpri">
|
||
<term>
|
||
<constant>Ev::MINPRI</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Минимально допустимый приоритет наблюдателя.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.maxpri">
|
||
<term>
|
||
<constant>Ev::MAXPRI</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Максимально допустимый приоритет наблюдателя.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
<!--}}}-->
|
||
<para xml:id="ev.constants.watcher-revents">
|
||
Битовые маски (полученных) событий:
|
||
<!--{{{-->
|
||
<variablelist>
|
||
<varlistentry xml:id="ev.constants.read">
|
||
<term>
|
||
<constant>Ev::READ</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Дескриптор файла в наблюдателе
|
||
<classname>EvIo</classname>
|
||
доступен для чтения.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.write">
|
||
<term>
|
||
<constant>Ev::WRITE</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Дескриптор файла в наблюдателе
|
||
<classname>EvIo</classname>
|
||
доступен для записи.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.timer">
|
||
<term>
|
||
<constant>Ev::TIMER</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
<classname>EvTimer</classname>
|
||
наблюдает за превышением лимита времени.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.periodic">
|
||
<term>
|
||
<constant>Ev::PERIODIC</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
<classname>EvPeriodic</classname>
|
||
наблюдает за превышением лимита времени.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.signal">
|
||
<term>
|
||
<constant>Ev::SIGNAL</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Сигнал, который указали в методе
|
||
<methodname>EvSignal::__construct</methodname>,
|
||
получен.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.child">
|
||
<term>
|
||
<constant>Ev::CHILD</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Идентификатор <parameter>pid</parameter>, который
|
||
указали в методе
|
||
<methodname>EvChild::__construct</methodname>,
|
||
получил изменение статуса.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.stat">
|
||
<term>
|
||
<constant>Ev::STAT</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Путь, который указали в наблюдателе
|
||
<classname>EvStat</classname>,
|
||
поменял свои атрибуты.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.idle">
|
||
<term>
|
||
<constant>Ev::IDLE</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Наблюдатель <classname>EvIdle</classname>
|
||
работает, когда остальные наблюдатели ничего не делают.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.prepare">
|
||
<term>
|
||
<constant>Ev::PREPARE</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Все наблюдатели
|
||
<classname>EvPrepare</classname>
|
||
вызываются непосредственно перед запуском
|
||
метода <methodname>Ev::run</methodname>.
|
||
Поэтому наблюдатели
|
||
<classname>EvPrepare</classname> —
|
||
последние наблюдатели, которые вызываются перед тем,
|
||
как цикл событий переходит в режим сна или опрашивает новые события.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.check">
|
||
<term>
|
||
<constant>Ev::CHECK</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Все наблюдатели
|
||
<classname>EvCheck</classname>
|
||
помещаются в очередь сразу после того, как
|
||
метод <methodname>Ev::run</methodname>
|
||
собрал новые события, но до того, как они вызовут какую-либо callback-функцию
|
||
для полученных событий.
|
||
Поэтому наблюдатели
|
||
<classname>EvCheck</classname>
|
||
будут вызваны раньше, чем любые другие наблюдатели с таким же
|
||
либо более низким приоритетом в этой итерации цикла событий.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.embed">
|
||
<term>
|
||
<constant>Ev::EMBED</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Встроенный цикл событий, который задали в наблюдателе
|
||
<classname>EvEmbed</classname>,
|
||
требует к себе внимания.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.custom">
|
||
<term>
|
||
<constant>Ev::CUSTOM</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Никогда не посылается (или иным образом используется) библиотекой
|
||
<literal>libev</literal>
|
||
самостоятельно, но может свободно использоваться пользователями
|
||
<literal>libev</literal>
|
||
для сигнализирующих наблюдателей (т. е. через метод
|
||
<methodname>EvWatcher::feed</methodname>
|
||
).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.error">
|
||
<term>
|
||
<constant>Ev::ERROR</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Произошла неизвестная ошибка и наблюдатель будет остановлен.
|
||
Ошибка могла произойти из-за некорректного запуска наблюдателя, потому что
|
||
модулю <literal>libev</literal>
|
||
не хватило памяти, дескриптор файла оказался закрытым
|
||
или возникла другая проблема.
|
||
Модуль <literal>Libev</literal>
|
||
считает такие ошибки ошибками приложения.
|
||
Дополнительные сведения даёт раздел
|
||
<link xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#ANATOMY_OF_A_WATCHER_CONTENT">Анатомия наблюдателей</link>
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
<!--}}}-->
|
||
<para xml:id="ev.constants.watcher-backends">
|
||
Флаги бэкенда:
|
||
<!--{{{-->
|
||
<variablelist>
|
||
<varlistentry xml:id="ev.constants.backend-select">
|
||
<term>
|
||
<constant>Ev::BACKEND_SELECT</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
<literal>выбор бэкенда — select(2)</literal>
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.backend-poll">
|
||
<term>
|
||
<constant>Ev::BACKEND_POLL</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
<literal>опрос бэкенда — poll(2)</literal>
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.backend-epoll">
|
||
<term>
|
||
<constant>Ev::BACKEND_EPOLL</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Специфичный для Linux бэкенд
|
||
<literal>epoll(7)</literal>
|
||
для ядер до и после 2.6.9
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.backend-kqueue">
|
||
<term>
|
||
<constant>Ev::BACKEND_KQUEUE</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
<literal>kqueue</literal> —
|
||
бэкенд большинства BSD-систем.
|
||
Наблюдатель <classname>EvEmbed</classname>
|
||
можно использовать для вставки одного цикла (с бэкендом kqueue)
|
||
в другой. Например, можно попытаться создать цикл событий
|
||
с бэкендом <literal>kqueue</literal>
|
||
и использовать его только для сокетов.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.backend-devpoll">
|
||
<term>
|
||
<constant>Ev::BACKEND_DEVPOLL</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Бэкенд Solaris 8. Пока не реализовали.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.backend-port">
|
||
<term>
|
||
<constant>Ev::BACKEND_PORT</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Механизм порта событий с хорошим масштабированием в Solaris 10.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.backend-all">
|
||
<term>
|
||
<constant>Ev::BACKEND_ALL</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Пробовать все бэкенды (кроме испорченных).
|
||
Не рекомендуется использовать напрямую.
|
||
Тут необходимо использовать побитовые операции
|
||
(т. е. <constant>Ev::BACKEND_ALL</constant> & ~ <constant>Ev::BACKEND_KQUEUE</constant>).
|
||
Вызывать метод <methodname>Ev::recommendedBackends</methodname>, или не задавать никакого бэкенда.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry xml:id="ev.constants.backend-mask">
|
||
<term>
|
||
<constant>Ev::BACKEND_MASK</constant>
|
||
</term>
|
||
<listitem>
|
||
<simpara>
|
||
Не бэкенд, но маска для выбора всех битов бэкендов из значения
|
||
<parameter>flags</parameter>, чтобы
|
||
исключить какие-либо бэкенды
|
||
(т. е. когда модифицируется переменная окружения
|
||
<varname>LIBEV_FLAGS</varname>).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
<!--}}}-->
|
||
<note xmlns="http://docbook.org/ns/docbook">
|
||
<simpara>
|
||
Для цикла по умолчанию во время фазы инициализации
|
||
модуля <literal>Ev</literal> регистрируется вызов
|
||
<link xlink:href="&url.ev.loop;">>ev_loop_fork</link>
|
||
через <literal>pthread_atfork</literal> (если такой имеется).
|
||
</simpara>
|
||
</note>
|
||
<note xmlns="http://docbook.org/ns/docbook">
|
||
<simpara>
|
||
Есть методы, которые разрешают получить доступ к <emphasis>циклу событий по
|
||
умолчанию</emphasis> в классе <classname>Ev</classname> (например,
|
||
методы <methodname>Ev::iteration</methodname>, <methodname>Ev::depth</methodname>
|
||
и т. д.). Для <emphasis>пользовательских циклов</emphasis> (которые создали методом
|
||
<methodname>EvLoop::__construct</methodname>) эти значения могут быть доступны
|
||
через соответствующие свойства и методы класса <classname>EvLoop</classname>.
|
||
</simpara>
|
||
<simpara>
|
||
Экземпляр цикла событий по умолчанию можно извлечь
|
||
методом <methodname>EvLoop::defaultLoop</methodname>.
|
||
</simpara>
|
||
</note>
|
||
</section>
|
||
<!-- }}} -->
|
||
</partintro>
|
||
|
||
&reference.ev.entities.ev;
|
||
|
||
</reference>
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|