Tenga cuidado con el manejo de la señal. Perl recibe señales de forma asíncrona y pueden perderse o interferir entre sí si se recibe una señal mientras la devolución de llamada maneja otra señal. apoyo Win32
librerías para el manejo de eventos, es bastante regular en Perl (tengo que apoyar no cygwin Win32), por lo general, usar un simple bucle de sondeo para los tiempos de espera:
use Time::HiRes qw(sleep);
sub timeout {
my $timeout = shift;
my $poll_interval = shift;
my $test_condition = shift;
until ($test_condition->() || $timeout <= 0) {
$timeout -= $poll_interval;
sleep $poll_interval;
}
return $timeout > 0; # condition was met before timeout
}
my $success = timeout(30, 0.1, \&some_condition_is_met);
El temporizador de apagado puede configurarse fácilmente por el usuario o la persona que llama y, a menos que esté haciendo un bucle extremadamente cerrado o tenga múltiples llamadas esperando en el bucle (donde puede terminar con una carrera o un bloqueo), es un método simple, confiable y cruzado -forma de plataforma para implementar un tiempo de espera.
También tenga en cuenta que la sobrecarga del ciclo significa que no puede garantizar que el tiempo de espera se cumpla por completo. $ test_condition, la disminución, la recolección de basura, etc. pueden interferir.
Su evaluación es vulnerable a un error desagradable. Lea los documentos Try :: Tiny para obtener una explicación detallada: http://search.cpan.org/perldoc?Try::Tiny – daotoad