Un vigilante de tipo idle detecta cuando el sistema esta ocioso, esto es: cuando
no hay eventos pendientes. Permite dos atributos adicionales min => $seconds
y max => $seconds
.
max
segundos
Event
esta ocioso
los eventos no serán generados con mayor frecuencia que min
segundos
min
ni max
el vigilante
adopta la conducta de una-vez por defecto (si repeat
es falso).
Si repeat
es verdadero la conducta por defecto es repetir.
repeat
a 1 cambiamos dicha conducta. en tal caso: min = 0.01
y
max
toma el valor infinito.
pp2@nereida:~/src/perl/Event$ cat -n idlewatcher.pl 1 #!/usr/bin/perl 2 use warnings; 3 use strict; 4 5 use IO::File; 6 use Math::BigFloat qw(:constant); 7 use constant VALUE => 0.001; 8 use Event qw{loop unloop}; 9 10 STDIN->blocking(0); 11 STDERR->autoflush(1); 12 print "Press CTRL_D to finish, any other key to monitor the computation\n"; 13 14 my $idle = Event->idle( 15 data => VALUE, 16 cb => sub { 17 $_[0]->w->data($_[0]->w->data+VALUE); 18 }, 19 repeat => 1 20 ); 21 22 my $io = Event->io( 23 fd => \*STDIN, 24 cb => sub { 25 warn "Partial result: ", $idle->data,".\n"; 26 my $bytes = sysread(STDIN, $_, 4); 27 unloop if (defined($bytes) and ($bytes == 0)); 28 } 29 ); 30 loop;Event proporciona un atributo especial para los objetos watcher con nombre data . Puede ser utilizado por el programador para guardar información en el objeto watcher.
El único argumento que se pasa al manejador o callback es el objeto evento que ha de ser manejado.
El método w
de dicho objeto permite obtener el vigilante.
Cuando se ejecuta el programa anterior se obtiene una salida similar a esta:
pp2@nereida:~/src/perl/Event$ idlewatcher.pl Press CTRL_D to finish, any other key to monitor the computation <-- retorno de carro Resultado parcial: 0.179. <-- retorno de carro Resultado parcial: 0.249. <-- retorno de carro Resultado parcial: 0.346. <-- retorno de carro Resultado parcial: 0.447. <-- retorno de carro Resultado parcial: 0.54. ^D <-- El usuario pulsa CTRL-D en un sistema Unix para terminar
min = 0
en el ejemplo anterior. ¿Que observa?Casiano Rodríguez León