Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://720837]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2021-10-19 11:36 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (76 votes). Check out past polls.