The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Time::HiRes::Sleep::Until - Provides common ways to sleep until...

SYNOPSIS

  use Time::HiRes::Sleep::Until;
  my $su    = Time::HiRes::Sleep::Until->new;
  my $slept = $su->epoch($epoch); # epoch is a calculated time + $seconds
  my $slept = $su->mark(20);      # sleep until 20 second mark of the clock :00, :20, or :40
  my $slept = $su->second(45);    # sleep until 45 seconds after the minute

DESCRIPTION

Sleep Until provides sleep wrappers for sleep functions that I commonly need. These methods are simply wrappers around Time::HiRes and Math::Round.

We use this package to make measurements at the same time within the minute for integration with RRDtool.

USAGE

  use strict;
  use warnings;
  use DateTime;
  use Time::HiRes::Sleep::Until;
  my $su=Time::HiRes::Sleep::Until->new;
  do {
    print DateTime->now, "\n"; #make a measurment three times a minute
  } while ($su->mark(20));

Perl One liner

  perl -MTime::HiRes::Sleep::Until -e 'printf "Slept: %s\n", Time::HiRes::Sleep::Until->new->top'

CONSTRUCTOR

new

  use Time::HiRes::Sleep::Until;
  my $su=Time::HiRes::Sleep::Until->new;

METHODS

epoch

Sleep until provided epoch in float seconds.

  while ($CONTINUE) {
    my $sleep_epoch = $su->time + 60/8;
    do_work();                #run process that needs to run back to back but not more than 8 times per minute
    $su->epoch($sleep_epoch); #sleep(7.5 - runtime). if runtime > 7.5 seconds does not sleep
  }

mark

Sleep until next second mark;

  my $slept=$su->mark(20); # 20 second mark, i.e.  3 times a minute on the 20s
  my $slept=$su->mark(10); # 10 second mark, i.e.  6 times a minute on the 10s
  my $slept=$su->mark(6);  #  6 second mark, i.e. 10 times a minute on 0,6,12,...

second

Sleep until the provided seconds after the minute

  my $slept=$su->second(0);  #sleep until top of minute
  my $slept=$su->second(30); #sleep until bottom of minute

top

Sleep until the top of the minute

  my $slept=$su->top; #alias for $su->second(0);

time

Method to access Time::HiRes time without another import.

sleep

Method to access Time::HiRes sleep without another import.

LIMITATIONS

The mathematics add a small amount of delay for which we do not account. Testing routinely passes with 100th of a second accuracy and typically with millisecond accuracy.

BUGS

Please log on RT and send an email to the author.

SUPPORT

DavisNetworks.com supports all Perl applications including this package.

AUTHOR

  Michael R. Davis
  CPAN ID: MRDVT
  Satellite Tracking of People, LLC
  mdavis@stopllc.com
  http://www.stopllc.com/

COPYRIGHT

This program is free software licensed under the...

The General Public License (GPL), Version 2, June 1991

The full text of the license can be found in the LICENSE file included with this module.

SEE ALSO

Time::HiRes, Math::Round