Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Re: Running code a certain amount of time

by blazar (Canon)
on Nov 01, 2008 at 09:52 UTC ( #720837=note: print w/replies, xml ) Need Help??

in reply to Running code a certain amount of time

I just want to be able to set the program to run for a couple of hours (if need be) and then stop.

(additional emphasis by me)

I personally believe that for such prolonged times a solution along the lines of that suggested by L~R is best suited. Playing with alarm as duly suggested by ccn is more important in short lived situations in which finer control over time is needed and/or you need to timeout "no matter what" e.g. when running external processes:

#!/usr/bin/perl use strict; use warnings; use 5.010; use File::Basename; my $pname; BEGIN { ($pname)=fileparse $0, qr/\.pl/i } my $TIME = 10; if (@ARGV) { # Working as a generic external program sleep +(my $time=shift); say "Slept $time seconds"; } else { # Example of timeout via alarm() my ($msg, $timeout) = ("died in SIG ALRM", int rand 2*$TIME); eval { local $SIG{ALRM} = sub {die $msg}; warn "[$pname] Trying to collect output from external program. +\n", "(Setting timeout to $timeout seconds.)\n"; alarm($timeout); chomp(my $output = qx/perl $0 $TIME/); say "The output got from external program is: `$output'"; alarm(0); }; if ($@ and $@ ~~ /\Q$msg/) { warn "[$pname] Timed out!\n"; } } __END__

Incidentally, it is worth reminding that for finer control over (not necessarily) short times a precious module would be Time::HiRes, which is in core.

If you can't understand the incipit, then please check the IPB Campaign.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://720837]
NodeReaper cleans and fillets

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2017-06-24 04:47 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (556 votes). Check out past polls.