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

Re^4: $SIG{ALRM} and windows vista?

by ikegami (Pope)
on Jan 04, 2010 at 06:58 UTC ( #815529=note: print w/ replies, xml ) Need Help??


in reply to Re^3: $SIG{ALRM} and windows vista?
in thread $SIG{ALRM} and windows vista?

It sounds like you're saying that signals don't interrupt I/O on Windows, but you know that only thing that Windows has that is similar to signals are Ctrl-C and Ctrl-Break. Are you saying they don't interrupt I/O? I haven't tested how they work.

Update: Clarified.


Comment on Re^4: $SIG{ALRM} and windows vista?
Re^5: $SIG{ALRM} and windows vista?
by BrowserUk (Pope) on Jan 04, 2010 at 07:18 UTC
    Windows doesn't have signals

    No, but it simulates some of them:

    use strict; use warnings; use 5.010; print 'Enter your password: '; my $password = eval { local $SIG{ALRM} = sub {die "timeout\n"}; alarm 5; # return <STDIN>; sleep 10; }; alarm 0; if ($@ =~ /timeout/) { print "You timed out.\n"; } __END__ [ 7:18:01.22] C:\test>alarmit.pl Enter your password: You timed out.

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

      A little bit of bean counting:

      Windows has no signals, and it does not emulate them. It's perl that implements an incomplete emulation of Unix signals, without support from Windows.

      From perlport:

      Don't count on signals or %SIG for anything.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
        It's perl that implements an incomplete emulation of Unix signals

        If we're being pedantic, it is Perl on Windows that does the emulation.

        Which is of course what I meant, though I agree, not exactly what I said.

      On Windows Vista, your code doesn't do anything useful. Specifically, your code fails to display the message "Enter your password:" and then wait for the user to enter their password. Instead, your code does nothing, then prints out "Enter your password: you timed out."

      In an effort to get "Enter your password: " to display immediately, I tried setting the output buffer to flush output immediately by setting $| = 1, but that didn't change the result.

        On Windows Vista, your code doesn't do anything useful.

        It does! It demonstrates that alarm works, when the operation, (sleep in this case), doesn't involve IO. Ie. The sleep 10; was interupted by the alarm 5. And that was the only reason I posted it.

        For a solution to your problem that works, see Term::ReadKey


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

        Instead, your code does nothing, then prints out "Enter your password: you timed out."

        As it should. His code demonstrates that alarm will interrupt sleep on Windows.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (8)
As of 2014-07-31 10:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (248 votes), past polls