Los Objetos Event::Event

El objeto Event::Event pasado al callback/manejador almacena información similar a la de los objetos watcher, pero a diferencia de estos sus atributos no pueden ser modificados.

Aunque la mayoría de los objetos evento pertenecen a la clase Event::Event algunos pertencen a una subclase:

pp2@nereida:~/src/perl/Event$ perl -wde 0
main::(-e:1):   0
  DB<1> use Event
  DB<2> Event->io(fd => \*STDIN, cb => sub { print ref($_[0])."\n"; Event::unloop })
  DB<3> Event::loop
hola
Event::Event::Io
  DB<4> hola
  DB<5> Event->timer(at => time()+1, cb => sub { print ref($_[0])."\n"; Event::unloop })
  DB<6> Event::loop
Event::Event
  DB<7> Event->idle(cb => sub { print ref($_[0])."\n"; Event::unloop })
  DB<8> Event::loop
Event::Event

Atributos de un Event::Event

Desde el Suceso Hasta el Manejo

El objeto Event::Event congela el estado del evento en el momento de entrar en la cola. El vigilante continúa trabajando y otras partes del programa pueden haberlo modificado desde el momento en que el evento entró en la cola hasta el momento en el que se ejecuta el callback/manejador (que puede ser un tiempo no despreciable). Incluso podría ocurrir que el watcher haya sido cancelado en cuyo caso cualquier intento de modificarlo provocaría una excepción. Por ello es conveniente comprobar el estado del watcher antes de modificarlo (dentro de un callback):

sub callback {
  my $event = shift;
  my $w = $event->w;

  ...
  $w->prio($w->prio-1) unless $w->is_cancelled;
  ...
}

Las Callbacks Deben Retornar Rápidamente

Recuerde que hay un único proceso para el reconocimiento y manejo de eventos. Mientras una callback esta ejecutándose el bucle, los vigilantes y los restantes manejadores permanecen bloqueados. Por ello es necesario que una callback retorne con rapidez. Si no es el caso siempre es posible:



Subsecciones
Casiano Rodríguez León
2012-02-29