Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Re: sleep doesn't respond to sigint(2)?

by JamesNC (Chaplain)
on Oct 18, 2003 at 13:40 UTC ( [id://300279]=note: print w/replies, xml ) Need Help??


in reply to Re: sleep doesn't respond to sigint(2)?
in thread sleep doesn't respond to sigint(2)?

Alarm works on Win32, but not ALL the time such as when you do a blocking system calls like  $response = <stdin> Abigail explains why this is so. Here is a sub that I wrote that will get you around the <stdin> problem that uses Term::ReadKey. If you don't supply a sub handler... it will just use a default... this is pretty useful for getting input from the keyboard when you want to timeout... play with it... you will get the idea..
#!/perl/bin/perl -w use strict; my $input = &my_stdin( prompt =>"Enter some text: ", timeout => 3, handler => \&my_alarm ); print "You entered: $input \n"; sub my_stdin { use Term::ReadKey; $| = 1; #turn buffering off so we can see our print below my %args = @_; my ($output,$key ); my $prompt = $args{'prompt'}; my $timeout = $args{'timeout'}; my $toh = $args{'handler'}; # ref to a handler $SIG{ALRM} = $toh || sub { print "Timeout\n"; exit;}; alarm($timeout); print $prompt; ReadMode 4; while(1){ if(defined($key = ReadKey(-1))){ my $val = ord $key; # 8 is backspace 10 and 13 are $output .= $key unless $val == 8 || $val == 10 || $val == 13; #echo to the screen print $key if length $output > 0; alarm($timeout); #reset the alarm #last if the user hits return last if ( $val == 10 || $val == 13); # chop one if we get a backspace if( $val == 8 ){ chop $output; print " "; print chr(8); } } } ReadMode 0; print "\n"; $output; } sub my_alarm{ print "I just died because you waited too long!"; exit; }


Update: missing code added :-)
Update2: added code to handle backspaces

JamesNC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://300279]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (7)
As of 2024-04-24 10:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found