Files
Leonardo Lara Rodrigues 17d859faaf sync line numbers with en rev
2026-01-23 09:16:58 -03:00

828 lines
26 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: b4fbf4434abeca44c58575ff3967e5640f7877d5 Maintainer: leonardolara Status: ready --><!-- CREDITS: fernandowobeto,leonardolara -->
<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>A classe Ev</title>
<titleabbrev>Ev</titleabbrev>
<partintro>
<!-- {{{ Ev intro -->
<section xml:id="ev.intro">
&reftitle.intro;
<simpara>
Ev é uma classe estática que fornece acesso ao laço padrão e a algumas
operações comuns.
</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">
Opções passadas para criar um laço:
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.flag-auto">
<term>
<constant>Ev::FLAG_AUTO</constant>
</term>
<listitem>
<simpara>
O valor das opções padrão
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-noenv">
<term>
<constant>Ev::FLAG_NOENV</constant>
</term>
<listitem>
<simpara>
Se esta opção for usada (ou o programa executar setuid ou setgid),
<literal>libev</literal>
não irá olhar para a variável de ambiente
<varname>LIBEV_FLAGS</varname>.
Caso contrário (por padrão),
<varname>LIBEV_FLAGS</varname>
substituirá as opções completamente se for encontrado. Útil para
testes de desempenho e busca de bugs.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-forkcheck">
<term>
<constant>Ev::FLAG_FORKCHECK</constant>
</term>
<listitem>
<simpara>
Faz com que a libev verifique se há uma bifurcação em cada iteração, em vez de chamar
<methodname>EvLoop::fork</methodname>
manualmente. Isso funciona chamando
<literal>getpid()</literal>
em cada iteração do laço e, portanto, isso pode desacelerar o
laço de eventos com muitas iterações de laço, mas geralmente não é
perceptível. Esta configuração de opção não pode ser substituída ou especificada na
variável de ambiente
<varname>LIBEV_FLAGS</varname>.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-noinotify">
<term>
<constant>Ev::FLAG_NOINOTIFY</constant>
</term>
<listitem>
<simpara>
Quando esta opção é especificada,
<literal>libev</literal>
não tentará usar a API
<literal>inotify</literal>
para seus observadores
<link xlink:href="&url.ev.stat;">ev_stat</link>.
A opção pode ser útil para conservar descritores de arquivo inotify,
caso contrário, cada laço usando observadores
<literal>ev_stat</literal>
consome um
identificador
<literal>inotify</literal>.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-signalfd">
<term>
<constant>Ev::FLAG_SIGNALFD</constant>
</term>
<listitem>
<simpara>
Quando esta opção for especificada,
<literal>libev</literal>
tentará usar a API
<literal>signalfd</literal>
para seus observadores
<link xlink:href="&url.ev.signal;">ev_signal</link>
(e
<link xlink:href="&url.ev.child;">ev_child</link>).
Essa API fornece sinais de forma síncrona, o que a torna
mais rápida e pode possibilitar a obtenção dos dados do sinal enfileirados.
Também pode simplificar o tratamento de sinais com threads, desde que os sinais
sejam bloqueados adequadamente nos threads.
<literal>Signalfd</literal>
não será usado por padrão.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-nosigmask">
<term>
<constant>Ev::FLAG_NOSIGMASK</constant>
</term>
<listitem>
<simpara>
Quando esta opção for especificada,
<literal>libev</literal>
evitará modificar a máscara do sinal. Especificamente, isso significa ter
certeza de que os sinais estão desbloqueados antes de recebê-los.
</simpara>
<simpara>
Esse comportamento é útil para manipulação de sinal personalizado ou manipulação
de sinais apenas em threads específicos.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.run-flags">
Opções passadas para
<methodname>Ev::run</methodname>
ou
<methodname>EvLoop::run</methodname>
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.run-nowait">
<term>
<constant>Ev::RUN_NOWAIT</constant>
</term>
<listitem>
<simpara>
Significa que o laço de eventos irá procurar novos eventos, irá tratar esses
eventos e quaisquer outros já pendentes, mas não irá esperar e bloquear
o processo caso não haja eventos e retornará após uma
iteração do laço. Às vezes, isso é útil para pesquisar e lidar com novos
eventos ao fazer cálculos demorados, para manter o programa
responsivo.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.run-once">
<term>
<constant>Ev::RUN_ONCE</constant>
</term>
<listitem>
<simpara>
Significa que o laço de eventos procurará novos eventos (aguardando se necessário)
e tratará desses e de quaisquer outros já pendentes. Ele bloqueará
o processo até que pelo menos um novo evento chegue (que pode ser um
evento interno ao próprio libev, portanto não há garantia de que um
retorno de chamada registrado pelo usuário será chamado) e retornará após uma
iteração do laço.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.break-flags">
Opção passada para
<methodname>Ev::stop</methodname>
, ou
<methodname>EvLoop::stop</methodname>
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.break-cancel">
<term>
<constant>Ev::BREAK_CANCEL</constant>
</term>
<listitem>
<simpara>
Cancele a operação de interrupção.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.break-one">
<term>
<constant>Ev::BREAK_ONE</constant>
</term>
<listitem>
<simpara>
Faz com que a chamada
<methodname>Ev::run</methodname>
(ou
<methodname>EvLoop::run</methodname>)
mais interna retorne.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.break-all">
<term>
<constant>Ev::BREAK_ALL</constant>
</term>
<listitem>
<simpara>
Faz com que todas as chamadas
<methodname>Ev::run</methodname>
(ou
<methodname>EvLoop::run</methodname>)
aninhadas retornem.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-pri">
Prioridades do observador:
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.minpri">
<term>
<constant>Ev::MINPRI</constant>
</term>
<listitem>
<simpara>
Prioridade mínima permitida do observador.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.maxpri">
<term>
<constant>Ev::MAXPRI</constant>
</term>
<listitem>
<simpara>
Prioridade máxima permitida do observador.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-revents">
Máscaras de bits de eventos (recebidos):
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.read">
<term>
<constant>Ev::READ</constant>
</term>
<listitem>
<simpara>
O descritor de arquivo no
observador <classname>EvIo</classname>
tornou-se legível.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.write">
<term>
<constant>Ev::WRITE</constant>
</term>
<listitem>
<simpara>
O descritor de arquivo no
observador <classname>EvIo</classname>
tornou-se gravável.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.timer">
<term>
<constant>Ev::TIMER</constant>
</term>
<listitem>
<simpara>
O tempo do observador <classname>EvTimer</classname>
expirou.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.periodic">
<term>
<constant>Ev::PERIODIC</constant>
</term>
<listitem>
<simpara>
O tempo do observador <classname>EvPeriodic</classname>
expirou.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.signal">
<term>
<constant>Ev::SIGNAL</constant>
</term>
<listitem>
<simpara>
Um sinal especificado em
<methodname>EvSignal::__construct</methodname>
foi recebido.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.child">
<term>
<constant>Ev::CHILD</constant>
</term>
<listitem>
<simpara>
O
<parameter>pid</parameter>
especificado em
<methodname>EvChild::__construct</methodname>
recebeu uma alteração de status.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.stat">
<term>
<constant>Ev::STAT</constant>
</term>
<listitem>
<simpara>
O caminho especificado no
observador <classname>EvStat</classname>
alterou seus atributos.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.idle">
<term>
<constant>Ev::IDLE</constant>
</term>
<listitem>
<simpara>
O observador <classname>EvIdle</classname>
funciona quando não há nada a fazer com outros observadores.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.prepare">
<term>
<constant>Ev::PREPARE</constant>
</term>
<listitem>
<simpara>
Todos
os observadores <classname>EvPrepare</classname>
são invocados logo antes do início de
<methodname>Ev::run</methodname>.
Assim,
os observadores <classname>EvPrepare</classname>
são os últimos observadores invocados antes do laço de eventos dormir ou
pesquisar novos eventos.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.check">
<term>
<constant>Ev::CHECK</constant>
</term>
<listitem>
<simpara>
Todos
os observadores <classname>EvCheck</classname>
são enfileirados logo após
<methodname>Ev::run</methodname>
reunir os novos eventos, mas antes de enfileirar quaisquer retornos de chamada para
quaisquer eventos recebidos. Assim,
os observadores <classname>EvCheck</classname>
serão invocados antes de quaisquer outros observadores de prioridade igual ou
inferior dentro de uma iteração do laço de eventos.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.embed">
<term>
<constant>Ev::EMBED</constant>
</term>
<listitem>
<simpara>
O laço de eventos incorporado especificado no
observador <classname>EvEmbed</classname>
precisa de atenção.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.custom">
<term>
<constant>Ev::CUSTOM</constant>
</term>
<listitem>
<simpara>
Nunca enviado (ou usado de outra forma) pela
própria <literal>libev</literal>,
mas pode ser usado livremente por usuários da
<literal>libev</literal>
para sinalizar observadores
(por exemplo, via
<methodname>EvWatcher::feed</methodname>).
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.error">
<term>
<constant>Ev::ERROR</constant>
</term>
<listitem>
<simpara>
Ocorreu um erro não especificado, o observador foi interrompido. Isto
pode acontecer porque o observador não pôde ser iniciado corretamente porque
<literal>libev</literal>
ficou sem memória, um descritor de arquivo foi fechado ou qualquer
outro problema.
<literal>Libev</literal>
considera esses bugs de aplicação. Veja também
<link xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#ANATOMY_OF_A_WATCHER_CONTENT">ANATOMIA
DE UM OBSERVADOR</link>
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-backends">
Opções de backend:
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.backend-select">
<term>
<constant>Ev::BACKEND_SELECT</constant>
</term>
<listitem>
<simpara>
<literal>select(2) backend</literal>
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-poll">
<term>
<constant>Ev::BACKEND_POLL</constant>
</term>
<listitem>
<simpara>
<literal>poll(2) backend</literal>
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-epoll">
<term>
<constant>Ev::BACKEND_EPOLL</constant>
</term>
<listitem>
<simpara>
Backend
<literal>epoll(7)</literal>
específico do Linux para kernels pré e pós-2.6.9
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-kqueue">
<term>
<constant>Ev::BACKEND_KQUEUE</constant>
</term>
<listitem>
<simpara>
Backend <literal>kqueue</literal>
usado na maioria dos sistemas BSD.
O observador <classname>EvEmbed</classname>
pode ser usado para incorporar um laço (com backend kqueue) em
outro. Por exemplo, pode-se tentar criar um laço de eventos com backend
<literal>kqueue</literal>
e usá-lo apenas para soquetes.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-devpoll">
<term>
<constant>Ev::BACKEND_DEVPOLL</constant>
</term>
<listitem>
<simpara>
Back-end do Solaris 8. Isso ainda não foi implementado.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-port">
<term>
<constant>Ev::BACKEND_PORT</constant>
</term>
<listitem>
<simpara>
Mecanismo de porta de eventos Solaris 10 com bom dimensionamento.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-all">
<term>
<constant>Ev::BACKEND_ALL</constant>
</term>
<listitem>
<simpara>
Experimente todos os back-ends (mesmo os corrompidos). Não é recomendado usá-lo
explicitamente. Operadores bit a bit devem ser aplicados aqui (por exemplo,
<constant>Ev::BACKEND_ALL</constant>
&amp; ~
<constant>Ev::BACKEND_KQUEUE</constant>).
Use
<methodname>Ev::recommendedBackends</methodname>
ou não não especifique nenhum back-end.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-mask">
<term>
<constant>Ev::BACKEND_MASK</constant>
</term>
<listitem>
<simpara>
Não é um backend, mas uma máscara para selecionar todos os bits de
backend do valor <parameter>flags</parameter>
para mascarar quaisquer backends (por exemplo, ao modificar
a variável de ambiente
<varname>LIBEV_FLAGS</varname>).
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<note xmlns="http://docbook.org/ns/docbook">
<simpara>
Para o laço padrão durante a fase de inicialização do módulo,
<literal>Ev</literal>
registra
<link xlink:href="&url.ev.loop;">ev_loop_fork</link>
chamada por meio de
<literal>pthread_atfork</literal>
(se disponível).
</simpara>
</note>
<note xmlns="http://docbook.org/ns/docbook">
<simpara>
Existem métodos que fornecem acesso ao
<emphasis>laço de eventos
padrão</emphasis>
na classe
<classname>Ev</classname>
(por exemplo,
<methodname>Ev::iteration</methodname>,
<methodname>Ev::depth</methodname>
etc.) Para
<emphasis>laços personalizados</emphasis>
(criados com
<methodname>EvLoop::__construct</methodname>)
esses valores podem ser acessados através de propriedades e métodos
correspondentes da
classe
<classname>EvLoop</classname>.
</simpara>
<simpara>
A instância do laço de eventos padrão em si pode ser obtida por meio do
método
<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
-->