in reply to Win32: timing out a perl subroutine
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).#! /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"; }
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
|
|---|