1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-24 15:32:36 +01:00
Files
archived-doc-es/reference/ev/ev.xml
2026-01-18 22:20:42 +00:00

801 lines
26 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: b4fbf4434abeca44c58575ff3967e5640f7877d5 Maintainer: PhilDaiguille 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>La clase Ev</title>
<titleabbrev>Ev</titleabbrev>
<partintro>
<!-- {{{ Ev intro -->
<section xml:id="ev.intro">
&reftitle.intro;
<simpara>
La clase Ev es una clase estática que proporciona acceso al bucle por defecto
así como a algunas operaciones comunes.
</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">
Flags pasados para crear un bucle:
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.flag-auto">
<term>
<constant>Ev::FLAG_AUTO</constant>
</term>
<listitem>
<simpara>
El valor por defecto de los flags.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-noenv">
<term>
<constant>Ev::FLAG_NOENV</constant>
</term>
<listitem>
<simpara>
Si este flag se utiliza (o si el programa ejecuta
setuid o setgid), <literal>libev</literal>
no va a mirar la variable de entorno
<varname>LIBEV_FLAGS</varname>. De lo contrario (comportamiento por defecto),
<varname>LIBEV_FLAGS</varname> va a sobrescribir completamente el
flag si se encuentra. Útil para pruebas de rendimiento
y para la búsqueda de bugs.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-forkcheck">
<term>
<constant>Ev::FLAG_FORKCHECK</constant>
</term>
<listitem>
<simpara>
Hace que libev verifique si existe un fork en cada iteración,
en lugar de llamar manualmente al método
<methodname>EvLoop::fork</methodname>. Este mecanismo funciona
llamando a <literal>getpid()</literal> en cada iteración de
la bucle, y así, va a ralentizar el bucle de eventos que
poseen muchas iteraciones, pero habitualmente,
este ralentizamiento no es notable. La configuración de este flag
no puede ser sobrescrita o especificada en la variable
de entorno <varname>LIBEV_FLAGS</varname>.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-noinotify">
<term>
<constant>Ev::FLAG_NOINOTIFY</constant>
</term>
<listitem>
<simpara>
Cuando este flag está especificado, <literal>libev</literal>
no va a intentar utilizar la API <literal>inotify</literal>
para estos watchers
<link xlink:href="&url.ev.stat;">ev_stat</link>.
Este flag puede ser útil para conservar los descriptores de
ficheros inotify, sabiendo que de lo contrario, cada bucle utilizando los
watchers <literal>ev_stat</literal> va a consumir un manejador
<literal>inotify</literal>.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-signalfd">
<term>
<constant>Ev::FLAG_SIGNALFD</constant>
</term>
<listitem>
<simpara>
Cuando este flag está especificado, <literal>libev</literal>
va a intentar utilizar la API <literal>signalfd</literal>
para estos watchers
<link xlink:href="&url.ev.signal;">ev_signal</link>
(y
<link xlink:href="&url.ev.child;">ev_child</link>).
Esta API entrega las señales de forma asíncrona, lo que
la hace más rápida, y puede permitir la recuperación de datos
de señales en espera. También puede simplificar la gestión
de señales con hilos, sabiendo que las señales son propiedades bloqueadas
en los hilos. <literal>Signalfd</literal>
no será utilizado por defecto.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-nosigmask">
<term>
<constant>Ev::FLAG_NOSIGMASK</constant>
</term>
<listitem>
<simpara>
Cuando este flag está especificado, <literal>libev</literal>
no va a modificar la máscara de señal. Esto significa
que se debe asegurar que las señales están desbloqueadas
antes de recibirlas.
</simpara>
<simpara>
Este comportamiento es útil para la gestión personalizada de señales,
o la gestión de señales únicamente en hilos específicos.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.run-flags">
Flags a pasar a
<methodname>Ev::run</methodname>,
o a <methodname>EvLoop::run</methodname>
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.run-nowait">
<term>
<constant>Ev::RUN_NOWAIT</constant>
</term>
<listitem>
<simpara>
Significa que el bucle de eventos va a mirar si hay nuevos
eventos presentes, va a gestionar estos nuevos eventos,
y todos los eventos especiales, pero no va a esperar y
bloquear el proceso en el caso de que no haya eventos,
y va a retornar después de una iteración del bucle. A veces
es útil poner en cola y gestionar los nuevos eventos
durante cálculos largos, y esto, para mantener el programa activo.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.run-once">
<term>
<constant>Ev::RUN_ONCE</constant>
</term>
<listitem>
<simpara>
Significa que el bucle de eventos va a mirar si hay nuevos
eventos presentes (y esperar, si es necesario), y va a gestionarlos,
ellos y los especiales. Va a bloquear el proceso hasta que al
menos un evento llegue (que puede ser un evento interno de libev,
también, no está garantizado que una función de callback registrada por
el usuario sea llamada), y va a retornar después de una iteración
del bucle.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.break-flags">
Flags pasados a
<methodname>Ev::stop</methodname>,
o a
<methodname>EvLoop::stop</methodname>
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.break-cancel">
<term>
<constant>Ev::BREAK_CANCEL</constant>
</term>
<listitem>
<simpara>
Cancela la operación de cancelación.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.break-one">
<term>
<constant>Ev::BREAK_ONE</constant>
</term>
<listitem>
<simpara>
Retorna la llamada más profunda a
<methodname>Ev::run</methodname>
(o <methodname>EvLoop::run</methodname>).
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.break-all">
<term>
<constant>Ev::BREAK_ALL</constant>
</term>
<listitem>
<simpara>
Retorna la llamada más cercana a
<methodname>Ev::run</methodname>
(o <methodname>EvLoop::run</methodname>).
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-pri">
Prioridades de Watcher:
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.minpri">
<term>
<constant>Ev::MINPRI</constant>
</term>
<listitem>
<simpara>
Prioridad mínima permitida para un watcher.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.maxpri">
<term>
<constant>Ev::MAXPRI</constant>
</term>
<listitem>
<simpara>
Prioridad máxima permitida para un watcher.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-revents">
Máscaras de bytes de eventos (recibidos):
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.read">
<term>
<constant>Ev::READ</constant>
</term>
<listitem>
<simpara>
El descriptor de fichero en el watcher
<classname>EvIo</classname> se ha vuelto accesible
en lectura.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.write">
<term>
<constant>Ev::WRITE</constant>
</term>
<listitem>
<simpara>
El descriptor de fichero en el watcher
<classname>EvIo</classname> se ha vuelto accesible
en escritura.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.timer">
<term>
<constant>Ev::TIMER</constant>
</term>
<listitem>
<simpara>
El watcher <classname>EvTimer</classname>
ha alcanzado su tiempo máximo de espera.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.periodic">
<term>
<constant>Ev::PERIODIC</constant>
</term>
<listitem>
<simpara>
El watcher <classname>EvPeriodic</classname>
ha alcanzado su tiempo máximo de espera.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.signal">
<term>
<constant>Ev::SIGNAL</constant>
</term>
<listitem>
<simpara>
Una señal especificada en
<methodname>EvSignal::__construct</methodname>
ha sido recibida.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.child">
<term>
<constant>Ev::CHILD</constant>
</term>
<listitem>
<simpara>
El <parameter>pid</parameter> especificado en
<methodname>EvChild::__construct</methodname>
ha recibido una modificación de estado.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.stat">
<term>
<constant>Ev::STAT</constant>
</term>
<listitem>
<simpara>
La ruta especificada en el watcher
<classname>EvStat</classname> ha modificado sus
atributos.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.idle">
<term>
<constant>Ev::IDLE</constant>
</term>
<listitem>
<simpara>
El watcher <classname>EvIdle</classname> funciona cuando
no tiene ninguna otra tarea que hacer con los otros watchers.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.prepare">
<term>
<constant>Ev::PREPARE</constant>
</term>
<listitem>
<simpara>
Todos los watchers <classname>EvPrepare</classname>
son llamados justo antes del inicio de
<methodname>Ev::run</methodname>. Así, los watchers
<classname>EvPrepare</classname> son los últimos watchers
en ser llamados antes del reposo del bucle de eventos,
o la puesta en cola de los nuevos eventos.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.check">
<term>
<constant>Ev::CHECK</constant>
</term>
<listitem>
<simpara>
Todos los watchers <classname>EvCheck</classname>
son puestos en cola justo después de que
<methodname>Ev::run</methodname> haya recuperado
los nuevos eventos, pero antes, todas las
funciones de callback de todos los eventos recibidos
son puestas en cola. Así, los watchers
<classname>EvCheck</classname> serán llamados antes que cualquier
otro watcher de misma prioridad o de prioridad más baja
en una iteración del bucle de eventos.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.embed">
<term>
<constant>Ev::EMBED</constant>
</term>
<listitem>
<simpara>
El bucle de eventos embebido especificado en el
watcher <classname>EvEmbed</classname> necesita
toda la atención.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.custom">
<term>
<constant>Ev::CUSTOM</constant>
</term>
<listitem>
<simpara>
Aún no enviado (o utilizado) por
<literal>libev</literal>, pero puede ser
libremente utilizado por los usuarios
<literal>libev</literal> para señalar los watchers
(i.e. vía el método <methodname>EvWatcher::feed</methodname>).
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.error">
<term>
<constant>Ev::ERROR</constant>
</term>
<listitem>
<simpara>
Ha ocurrido un error desconocido, el watcher se ha detenido. Esto puede
ocurrir porque el watcher no ha podido ser iniciado correctamente
porque <literal>libev</literal> ha excedido la memoria asignada, un
descriptor de fichero ha sido cerrado, u otro problema.
<literal>Libev</literal> considera esto como bugs
de la aplicación. Ver también
<link xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#ANATOMY_OF_A_WATCHER_CONTENT">la anatomía
de un watcher</link>
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-backends">
Flags 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 de Linux
para, a la vez, los kernels antes y después de 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> utilizado en la
mayoría de los sistemas BSD. El watcher <classname>EvEmbed</classname>
puede ser utilizado para embeber un bucle (con el
backend kqueue) en otro. Actualmente, un bucle puede
intentar crear un bucle de eventos con el backend
<literal>kqueue</literal> y utilizarlo únicamente para los
sockets.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-devpoll">
<term>
<constant>Ev::BACKEND_DEVPOLL</constant>
</term>
<listitem>
<simpara>
Backend Solaris 8. Actualmente no implementado.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-port">
<term>
<constant>Ev::BACKEND_PORT</constant>
</term>
<listitem>
<simpara>
Mecanismo de puerto de eventos Solaris con buen rendimiento.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-all">
<term>
<constant>Ev::BACKEND_ALL</constant>
</term>
<listitem>
<simpara>
Prueba todos los backends (incluyendo los corruptos).
No se recomienda utilizarlo explícitamente.
Los operadores de bits deberían ser aplicados aquí
(i.e. <constant>Ev::BACKEND_ALL</constant> &amp; ~
<constant>Ev::BACKEND_KQUEUE</constant>).
Utilice el método
<methodname>Ev::recommendedBackends</methodname> o no
especifique ningún backend.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-mask">
<term>
<constant>Ev::BACKEND_MASK</constant>
</term>
<listitem>
<simpara>
No es un backend, sino una máscara para seleccionar todos
los bits de un backend desde el valor de
<parameter>flags</parameter> para representar en una
máscara cualquier backend (i.e. al modificar
la variable de entorno <varname>LIBEV_FLAGS</varname>).
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<note xmlns="http://docbook.org/ns/docbook">
<simpara>
Para el bucle por defecto, durante la fase de inicialización
del módulo, <literal>Ev</literal> registra llamadas a
<link xlink:href="&url.ev.loop;">ev_loop_fork</link>
vía <literal>pthread_atfork</literal> (si está disponible).
</simpara>
</note>
<note xmlns="http://docbook.org/ns/docbook">
<simpara>
Hay métodos que proporcionan acceso a la
<emphasis>bucle de eventos por defecto</emphasis>
en la clase <classname>Ev</classname>
(i.e. <methodname>Ev::iteration</methodname>,
<methodname>Ev::depth</methodname>, etc.) Para los
<emphasis>bucles personalizados</emphasis> (creados con
<methodname>EvLoop::__construct</methodname>), estos
valores pueden ser accesibles vía las propiedades y los
métodos correspondientes de la clase
<classname>EvLoop</classname>.
</simpara>
<simpara>
La instancia del bucle de eventos por defecto puede ser recuperada
vía el 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
-->