in reply to Reasonably accurate timing

I tried a few ways, but they all seem to burp a couple of seconds once in a while even when niced. Shouldn't miss a whole minute though if you set $duration to 60.
#!/usr/bin/perl -w use strict; use Time::HiRes qw (usleep); $|=1; my $duration = 2; # seconds between job starts my $maxsecs = 30; my $tinit = my $t0 = time; my $t1; while (1) { $t1 = time; last if $t1-$tinit > $maxsecs; if ($t1-$t0 >= $duration) { # if delta-t >= d secs &act; if ($t1-$t0 > $duration+1) { print "(",$t1-$t0-$duration,")" }; $t0 = $t1; } &waitfortick; } sub act { print "tick\n"; `boop`; # same 100% volume } sub waitfortick { print "."; #&sleepwait; # try these three separately #&selwait; &hireswait; `beep`; # from xtune, does wave -d 0.01 -f 250 -l 30 } sub sleepwait { # tick approx 1 sec sleep 1; } sub selwait { select(undef, undef, undef, 0.10); # wait approx 100 millisecs } sub hireswait { usleep 100000; # sleep 100,000 microsecs if you have usleep }