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