Files
doc-fr/reference/ev/ev.xml
2024-06-16 14:31:29 +01:00

805 lines
26 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 4d17b7b4947e7819ff5036715dd706be87ae4def Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.ev" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>La classe Ev</title>
<titleabbrev>Ev</titleabbrev>
<partintro>
<!-- {{{ Ev intro -->
<section xml:id="ev.intro">
&reftitle.intro;
<para>
La classe Ev est une classe statique fournissant l'accès à la boucle par défaut
ainsi qu'à quelques opérations communes.
</para>
</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">
Drapeaux passés pour créer une boucle :
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.flag-auto">
<term>
<constant>Ev::FLAG_AUTO</constant>
</term>
<listitem>
<para>
La valeur par défaut des drapeaux
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-noenv">
<term>
<constant>Ev::FLAG_NOENV</constant>
</term>
<listitem>
<para>
Si ce drapeau est utilisé (ou que le programme exécute
setuid ou setgid), <literal>libev</literal>
ne va pas regarder la variable d'environnement
<varname>LIBEV_FLAGS</varname>. Sinon (comportement par défaut),
<varname>LIBEV_FLAGS</varname> va écraser complètement le
drapeau s'il est trouvé. Utile pour des tests de performance
et pour la recherche de bogues.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-forkcheck">
<term>
<constant>Ev::FLAG_FORKCHECK</constant>
</term>
<listitem>
<para>
Fait que libev va vérifier si un fork existe à chaque itération,
au lieu d'appeler manuellement la méthode
<methodname>EvLoop::fork</methodname>. Ce mécanisme fonctionne
en appelant <literal>getpid()</literal> à chaque itéraiton de
la boucle, et ainsi, va ralentir la boucle d'événements qui
possèdent beaucoup d'itérations, mais habituellement,
ce ralentissement n'est pas notable. La configuration de ce drapeau
ne peut pas être écrasée ou spécifiée dans la variable
d'environnement <varname>LIBEV_FLAGS</varname>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-noinotify">
<term>
<constant>Ev::FLAG_NOINOTIFY</constant>
</term>
<listitem>
<para>
Lorsque ce drapeau est spécifié, <literal>libev</literal>
ne va pas tenter d'utiliser l'API <literal>inotify</literal>
pour ces watchers
<link
xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_stat_code_did_the_file_attri">ev_stat</link>.
Ce drapeau peut être utile pour conserver les descripteurs de
fichers inotify, sachant que sinon, chaque boucle utilisant les
watchers <literal>ev_stat</literal> va consommer un gestionnaire
<literal>inotify</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-signalfd">
<term>
<constant>Ev::FLAG_SIGNALFD</constant>
</term>
<listitem>
<para>
Lorsque ce drapeau est spécifié, <literal>libev</literal>
va tenter d'utiliser l'API <literal>signalfd</literal>
pour ces watchers
<link
xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_signal_code_signal_me_when_a">ev_signal</link>
(et
<link
xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_child_code_watch_out_for_pro">ev_child</link>
). Cette API délivre les signaux de façon asynchrones, ce qui
la rend plus rapide, et peut permettre la récupération des données
des signaux en attente. Elle peut également simplifier la gestion
des signaux avec les threads, sachant que les signaux sont des
propriétés bloquées dans les threads. <literal>Signalfd</literal>
ne sera pas utilisé par défaut.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.flag-nosigmask">
<term>
<constant>Ev::FLAG_NOSIGMASK</constant>
</term>
<listitem>
<para>
Lorsque ce drapeau est spécifié, <literal>libev</literal>
ne va pas modifier le masque du signal. Ceci signifie
que vous devez vous assurer que les signaux sont déverrouillés
avant de les recevoir.
</para>
<para>
Ce comportement est utile pour la gestion personalisée des signaux,
ou la gestion des signaux uniquement dans des threads spécifiques.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.run-flags">
Drapeaux à passer à <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>
<para>
Signifie que la boucle d'événements va regarder si de nouveaux
événements sont présents, va gérer ces nouveaux événements,
et tous les événements spéciaux, mais ne va pas attendre et
bloquer le processus dans le cas où il n'y a pas d'événement,
et va retourner après une itération de la boucle. Il est parfois
utile de palcer en file et gérer les nouveaux événements
pendant de longs calculs, et ce, pour garder le programme actif.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.run-once">
<term>
<constant>Ev::RUN_ONCE</constant>
</term>
<listitem>
<para>
Signifie que la boucle d'événements va regarder si de nouveaux
événements sont présents (et attendre, si nécessaire), et va les
gérer, eux et les spéciaux. Elle va bloquer le processus tant qu'au
moins un événement arrive (qui peut être un événement interne à libev,
aussi, il n'est pas garantie qu'une fonction de rappel enregistrée par
l'utilisateur ne soit appelée), et va retourner après une itération
de la boucle.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.break-flags">
Drapeaux passés à <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>
<para>
Annule l'opération d'annulation.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.break-one">
<term>
<constant>Ev::BREAK_ONE</constant>
</term>
<listitem>
<para>
Retourne le plus profond appel à
<methodname>Ev::run</methodname>
(ou <methodname>EvLoop::run</methodname>).
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.break-all">
<term>
<constant>Ev::BREAK_ALL</constant>
</term>
<listitem>
<para>
Retourne le plus proche appel à
<methodname>Ev::run</methodname>
(ou <methodname>EvLoop::run</methodname>).
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-pri">
Priorités de Watcher :
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.minpri">
<term>
<constant>Ev::MINPRI</constant>
</term>
<listitem>
<para>
Priorité minimale autorisée pour un watcher.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.maxpri">
<term>
<constant>Ev::MAXPRI</constant>
</term>
<listitem>
<para>
Priorité maximale autorisée pour un watcher.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-revents">
Masques d'octets d'événements (reçus) :
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.read">
<term>
<constant>Ev::READ</constant>
</term>
<listitem>
<para>
Le descripteur de fichier dans le watcher
<classname>EvIo</classname> est devenu accessible
en lecture.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.write">
<term>
<constant>Ev::WRITE</constant>
</term>
<listitem>
<para>
Le descripteur de fichier dans le watcher
<classname>EvIo</classname> est devenu accessible
en écriture.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.timer">
<term>
<constant>Ev::TIMER</constant>
</term>
<listitem>
<para>
Le watcher <classname>EvTimer</classname>
a atteint son délai maximal d'attente.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.periodic">
<term>
<constant>Ev::PERIODIC</constant>
</term>
<listitem>
<para>
Le watcher <classname>EvPeriodic</classname>
a atteint son délai maximal d'attente.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.signal">
<term>
<constant>Ev::SIGNAL</constant>
</term>
<listitem>
<para>
Un signal spécifié dans
<methodname>EvSignal::__construct</methodname>
a été reçu.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.child">
<term>
<constant>Ev::CHILD</constant>
</term>
<listitem>
<para>
Le <parameter>pid</parameter> spécifié dans
<methodname>EvChild::__construct</methodname>
a reçu une modification de statut.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.stat">
<term>
<constant>Ev::STAT</constant>
</term>
<listitem>
<para>
Le chemin spécifié dans le watcher
<classname>EvStat</classname> a modifié ses
attributs.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.idle">
<term>
<constant>Ev::IDLE</constant>
</term>
<listitem>
<para>
Le watcher <classname>EvIdle</classname> fonctionne lorsqu'il
n'a aucune autre tâche à faire avec les autres watchers.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.prepare">
<term>
<constant>Ev::PREPARE</constant>
</term>
<listitem>
<para>
Tous les watchers <classname>EvPrepare</classname>
sont appelés juste avant le démarrage de
<methodname>Ev::run</methodname>. Ainsi, les watchers
<classname>EvPrepare</classname> sont les derniers watchers
à être appelés avant le repos de la boucle d'événements,
ou la mise en file des nouveaux événements.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.check">
<term>
<constant>Ev::CHECK</constant>
</term>
<listitem>
<para>
Tous les watchers <classname>EvCheck</classname>
sont placés en file d'attente juste après que
<methodname>Ev::run</methodname> ait récupéré
les nouveaux événements, mais avant, toutes les
fonctions de rappel de tous les événements reçus
sont placées en file d'attente. Ainsi, les watchers
<classname>EvCheck</classname> seront appelés avant tout
autre watcher de même priorité ou de priorité plus basse
dans une itération de boucle d'événements.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.embed">
<term>
<constant>Ev::EMBED</constant>
</term>
<listitem>
<para>
La boucle d'événements embarquée spécifié dans le
watcher <classname>EvEmbed</classname> a besoin
de toute l'attention.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.custom">
<term>
<constant>Ev::CUSTOM</constant>
</term>
<listitem>
<para>
Pas encore envoyé (ou utilisé) par
<literal>libev</literal>, mais peut être
librement utilisé par les utilisateurs
<literal>libev</literal> pour signaler les watchers
(i.e. via la méthode <methodname>EvWatcher::feed</methodname>).
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.error">
<term>
<constant>Ev::ERROR</constant>
</term>
<listitem>
<para>
Une erreur inconnue est survenue, le watcher s'est arrêté. Ceci peut
arriver car le watcher n'a pas pu être démarré proprement
car <literal>libev</literal> a dépassé la mémoire allouée, une
descripteur de fichier a été fermé, ou tout autre problème.
<literal>Libev</literal> considère ceci comme des bogues
de l'application. Voir aussi
<link
xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#ANATOMY_OF_A_WATCHER_CONTENT">l'anatomie
d'un watcher</link>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<para xml:id="ev.constants.watcher-backends">
Drapeaux de Backend :
<!--{{{-->
<variablelist>
<varlistentry xml:id="ev.constants.backend-select">
<term>
<constant>Ev::BACKEND_SELECT</constant>
</term>
<listitem>
<para>
<literal>select(2) backend</literal>
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-poll">
<term>
<constant>Ev::BACKEND_POLL</constant>
</term>
<listitem>
<para>
<literal>poll(2) backend</literal>
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-epoll">
<term>
<constant>Ev::BACKEND_EPOLL</constant>
</term>
<listitem>
<para>
Backend <literal>epoll(7)</literal> spécifique à Linux
pour, à la fois, les kernels avant et après 2.6.9.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-kqueue">
<term>
<constant>Ev::BACKEND_KQUEUE</constant>
</term>
<listitem>
<para>
Backend <literal>kqueue</literal> utilisé sur la
plupart des systèmes BSD. Le watcher <classname>EvEmbed</classname>
peut être utilisé pour embarquer une boucle (avec le
backend kqueue) dans une autre. Actuellement, une boucle peut
tenter de créer une boucle d'événements avec le backend
<literal>kqueue</literal> et l'utiliser uniquement pour les
sockets.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-devpoll">
<term>
<constant>Ev::BACKEND_DEVPOLL</constant>
</term>
<listitem>
<para>
Backend Solaris 8. Actuellement non implémenté.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-port">
<term>
<constant>Ev::BACKEND_PORT</constant>
</term>
<listitem>
<para>
Mécanisme de port d'événements Solaris avec un bon rendement.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-all">
<term>
<constant>Ev::BACKEND_ALL</constant>
</term>
<listitem>
<para>
Essai tous les backends (y compris les corrompus).
Il n'est pas recommandé de l'utiliser explicitement.
Les opérateurs de bits devraient être appliqués ici
(i.e. <constant>Ev::BACKEND_ALL</constant> &amp; ~
<constant>Ev::BACKEND_KQUEUE</constant>). Utilisez la méthode
<methodname>Ev::recommendedBackends</methodname> ou ne
spécifiez aucun backend.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ev.constants.backend-mask">
<term>
<constant>Ev::BACKEND_MASK</constant>
</term>
<listitem>
<para>
Pas un backend, mais un masque pour sélectionner tous
les bits d'un backend depuis la valeur de
<parameter>flags</parameter> pour représenter dans un
masque n'importe quel backend (i.e. lors de la modification
de la variable d'environnement <varname>LIBEV_FLAGS</varname>).
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<!--}}}-->
<note xmlns="http://docbook.org/ns/docbook">
<para>
Pour la boucle par défaut, pendant la phase d'initialisation
du module, <literal>Ev</literal> enregistre des appels à
<link
xlink:href="http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#FUNCTIONS_CONTROLLING_EVENT_LOOPS_CO">ev_loop_fork</link>
via <literal>pthread_atfork</literal> (si disponible).
</para>
</note>
<note xmlns="http://docbook.org/ns/docbook">
<para>
Il y a des méthodes fournissant l'accès à la
<emphasis>boucle d'événements par défaut</emphasis>
dans la classe <classname>Ev</classname>
(i.e. <methodname>Ev::iteration</methodname>,
<methodname>Ev::depth</methodname>, etc.) Pour les
<emphasis>boucles personnalisées</emphasis> (créées avec
<methodname>EvLoop::__construct</methodname>), ces
valeurs peuvent être accessibles via les propriétés et les
méthodes correspondantes de la classe
<classname>EvLoop</classname>.
</para>
<para>
L'instance de la boucle d'événements par défaut peut être récupérée
via la méthode <methodname>EvLoop::defaultLoop</methodname>.
</para>
</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
-->