La classe EvEv
&reftitle.intro;
La classe Ev est une classe statique fournissant l'accès à la boucle par défaut
ainsi qu'à quelques opérations communes.
&reftitle.classsynopsis;
EvfinalEvConstantesconstintEv::FLAG_AUTO0constintEv::FLAG_NOENV16777216constintEv::FLAG_FORKCHECK33554432constintEv::FLAG_NOINOTIFY1048576constintEv::FLAG_SIGNALFD2097152constintEv::FLAG_NOSIGMASK4194304constintEv::RUN_NOWAIT1constintEv::RUN_ONCE2constintEv::BREAK_CANCEL0constintEv::BREAK_ONE1constintEv::BREAK_ALL2constintEv::MINPRI-2constintEv::MAXPRI2constintEv::READ1constintEv::WRITE2constintEv::TIMER256constintEv::PERIODIC512constintEv::SIGNAL1024constintEv::CHILD2048constintEv::STAT4096constintEv::IDLE8192constintEv::PREPARE16384constintEv::CHECK32768constintEv::EMBED65536constintEv::CUSTOM16777216constintEv::ERROR2147483648constintEv::BACKEND_SELECT1constintEv::BACKEND_POLL2constintEv::BACKEND_EPOLL4constintEv::BACKEND_KQUEUE8constintEv::BACKEND_DEVPOLL16constintEv::BACKEND_PORT32constintEv::BACKEND_ALL63constintEv::BACKEND_MASK65535&Methods;
&reftitle.constants;
Drapeaux passés pour créer une boucle :
Ev::FLAG_AUTO
La valeur par défaut des drapeaux
Ev::FLAG_NOENV
Si ce drapeau est utilisé (ou que le programme exécute
setuid ou setgid), libev
ne va pas regarder la variable d'environnement
LIBEV_FLAGS. Sinon (comportement par défaut),
LIBEV_FLAGS va écraser complètement le
drapeau s'il est trouvé. Utile pour des tests de performance
et pour la recherche de bogues.
Ev::FLAG_FORKCHECK
Fait que libev va vérifier si un fork existe à chaque itération,
au lieu d'appeler manuellement la méthode
EvLoop::fork. Ce mécanisme fonctionne
en appelant getpid() à 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 LIBEV_FLAGS.
Ev::FLAG_NOINOTIFY
Lorsque ce drapeau est spécifié, libev
ne va pas tenter d'utiliser l'API inotify
pour ces watchers
ev_stat.
Ce drapeau peut être utile pour conserver les descripteurs de
fichers inotify, sachant que sinon, chaque boucle utilisant les
watchers ev_stat va consommer un gestionnaire
inotify.
Ev::FLAG_SIGNALFD
Lorsque ce drapeau est spécifié, libev
va tenter d'utiliser l'API signalfd
pour ces watchers
ev_signal
(et
ev_child
). 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. Signalfd
ne sera pas utilisé par défaut.
Ev::FLAG_NOSIGMASK
Lorsque ce drapeau est spécifié, libev
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.
Ce comportement est utile pour la gestion personalisée des signaux,
ou la gestion des signaux uniquement dans des threads spécifiques.
Drapeaux à passer à Ev::run
ou à EvLoop::runEv::RUN_NOWAIT
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.
Ev::RUN_ONCE
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.
Drapeaux passés à Ev::stop ou à
EvLoop::stopEv::BREAK_CANCEL
Annule l'opération d'annulation.
Ev::BREAK_ONE
Retourne le plus profond appel à
Ev::run
(ou EvLoop::run).
Ev::BREAK_ALL
Retourne le plus proche appel à
Ev::run
(ou EvLoop::run).
Priorités de Watcher :
Ev::MINPRI
Priorité minimale autorisée pour un watcher.
Ev::MAXPRI
Priorité maximale autorisée pour un watcher.
Masques d'octets d'événements (reçus) :
Ev::READ
Le descripteur de fichier dans le watcher
EvIo est devenu accessible
en lecture.
Ev::WRITE
Le descripteur de fichier dans le watcher
EvIo est devenu accessible
en écriture.
Ev::TIMER
Le watcher EvTimer
a atteint son délai maximal d'attente.
Ev::PERIODIC
Le watcher EvPeriodic
a atteint son délai maximal d'attente.
Ev::SIGNAL
Un signal spécifié dans
EvSignal::__construct
a été reçu.
Ev::CHILD
Le pid spécifié dans
EvChild::__construct
a reçu une modification de statut.
Ev::STAT
Le chemin spécifié dans le watcher
EvStat a modifié ses
attributs.
Ev::IDLE
Le watcher EvIdle fonctionne lorsqu'il
n'a aucune autre tâche à faire avec les autres watchers.
Ev::PREPARE
Tous les watchers EvPrepare
sont appelés juste avant le démarrage de
Ev::run. Ainsi, les watchers
EvPrepare 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.
Ev::CHECK
Tous les watchers EvCheck
sont placés en file d'attente juste après que
Ev::run 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
EvCheck 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.
Ev::EMBED
La boucle d'événements embarquée spécifié dans le
watcher EvEmbed a besoin
de toute l'attention.
Ev::CUSTOM
Pas encore envoyé (ou utilisé) par
libev, mais peut être
librement utilisé par les utilisateurs
libev pour signaler les watchers
(i.e. via la méthode EvWatcher::feed).
Ev::ERROR
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 libev a dépassé la mémoire allouée, une
descripteur de fichier a été fermé, ou tout autre problème.
Libev considère ceci comme des bogues
de l'application. Voir aussi
l'anatomie
d'un watcher
Drapeaux de Backend :
Ev::BACKEND_SELECTselect(2) backendEv::BACKEND_POLLpoll(2) backendEv::BACKEND_EPOLL
Backend epoll(7) spécifique à Linux
pour, à la fois, les kernels avant et après 2.6.9.
Ev::BACKEND_KQUEUE
Backend kqueue utilisé sur la
plupart des systèmes BSD. Le watcher EvEmbed
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
kqueue et l'utiliser uniquement pour les
sockets.
Ev::BACKEND_DEVPOLL
Backend Solaris 8. Actuellement non implémenté.
Ev::BACKEND_PORT
Mécanisme de port d'événements Solaris avec un bon rendement.
Ev::BACKEND_ALL
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. Ev::BACKEND_ALL & ~
Ev::BACKEND_KQUEUE). Utilisez la méthode
Ev::recommendedBackends ou ne
spécifiez aucun backend.
Ev::BACKEND_MASK
Pas un backend, mais un masque pour sélectionner tous
les bits d'un backend depuis la valeur de
flags pour représenter dans un
masque n'importe quel backend (i.e. lors de la modification
de la variable d'environnement LIBEV_FLAGS).
Pour la boucle par défaut, pendant la phase d'initialisation
du module, Ev enregistre des appels à
ev_loop_fork
via pthread_atfork (si disponible).
Il y a des méthodes fournissant l'accès à la
boucle d'événements par défaut
dans la classe Ev
(i.e. Ev::iteration,
Ev::depth, etc.) Pour les
boucles personnalisées (créées avec
EvLoop::__construct), ces
valeurs peuvent être accessibles via les propriétés et les
méthodes correspondantes de la classe
EvLoop.
L'instance de la boucle d'événements par défaut peut être récupérée
via la méthode EvLoop::defaultLoop.
&reference.ev.entities.ev;