Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Win32: timing out a perl subroutine

by Brovnik (Hermit)
on Jun 19, 2001 at 19:18 UTC ( [id://89662]=note: print w/replies, xml ) Need Help??


in reply to Win32: timing out a perl subroutine

You can implement your own non pre-emptive timer fairly easily :

#! /usr/local/bin/perl -w use strict; { my $timesup = undef; sub timeout { if (@_) { # set the time to timeout on $timesup = time() + shift; } else { # return true as soon as we go over the limit return time() > $timesup; } } } # Programs code here timeout(10); # set to timeout in 10 seconds. my $timedout = 0; for (1..15) { # check if we can continue # If not, set flag to check later $timedout++ && last if timeout(); print "Do complicated thing, iter $_\n"; sleep(1); # pretend to do hard stuff } if ($timedout) { print "operation timedout\n"; } else { print "Success, complicated stuff completed\n"; }
Of course, being non-preemptive, this doesn't guarantee you'll get control back within a certain time, if the loop iteration takes to long, or the process blocks (e.g. waiting for user input).

Also assumes that other functions like alarm() aren't implemented, since these would be more robust, but the above is lightweight and may do what you need.

Update: I meant nonpre-emptive.
--
Brovnik

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (2)
As of 2024-04-19 01:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found