X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FTime%2FHiRes%2FHiRes.pm;h=e52d7eef99fab2d9c70ab0c4ed290a6016c99099;hb=389199d8e578e8c2660c4fea3c0dd0bee7279ecb;hp=0bc152b720778656e4b65fb10453f759f4f79d14;hpb=dcf686c9ff9829ff83c8d4e65b735a4ba6a9e6f5;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/Time/HiRes/HiRes.pm b/ext/Time/HiRes/HiRes.pm index 0bc152b..e52d7ee 100644 --- a/ext/Time/HiRes/HiRes.pm +++ b/ext/Time/HiRes/HiRes.pm @@ -1,21 +1,35 @@ package Time::HiRes; use strict; -use vars qw($VERSION @ISA @EXPORT @EXPORT_OK @EXPORT_FAIL); +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); require Exporter; -require DynaLoader; +use XSLoader; -@ISA = qw(Exporter DynaLoader); +@ISA = qw(Exporter); @EXPORT = qw( ); -@EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval); - -$VERSION = do{my@r=q$Revision: 1.20 $=~/\d+/g;sprintf '%02d.'.'%02d'x$#r,@r}; - -bootstrap Time::HiRes $VERSION; +@EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval + getitimer setitimer ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF); + +$VERSION = '1.20_00'; + +sub AUTOLOAD { + my $constname; + ($constname= $AUTOLOAD) =~ s/.*:://; + my $val = constant($constname, @_ ? $_[0] : 0); + if ($!) { + my ($pack,$file,$line) = caller; + die "Your vendor has not defined Time::HiRes macro $constname, used at $file line $line.\n"; + } + { + no strict 'refs'; + *$AUTOLOAD = sub { $val }; + } + goto &$AUTOLOAD; +} -@EXPORT_FAIL = grep { ! defined &$_ } @EXPORT_OK; +XSLoader::load 'Time::HiRes', $VERSION; # Preloaded methods go here. @@ -26,14 +40,6 @@ sub tv_interval { (${$b}[0] - ${$a}[0]) + ((${$b}[1] - ${$a}[1]) / 1_000_000); } -# I'm only supplying this because the version of it in 5.003's Export.pm -# is buggy (it doesn't shift off the class name). - -sub export_fail { - my $self = shift; - @_; -} - # Autoload methods go after =cut, and are processed by the autosplit program. 1; @@ -60,11 +66,18 @@ Time::HiRes - High resolution ualarm, usleep, and gettimeofday $elapsed = tv_interval ( $t0 ); use Time::HiRes qw ( time alarm sleep ); + $now_fractions = time; sleep ($floating_seconds); alarm ($floating_seconds); alarm ($floating_seconds, $floating_interval); + use Time::HiRes qw( setitimer getitimer + ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ); + + setitimer ($which, $floating_seconds, $floating_interval ); + getitimer ($which); + =head1 DESCRIPTION The C module implements a Perl interface to the usleep, ualarm, @@ -75,12 +88,12 @@ the underlying gettimeofday, usleep, and ualarm calls. If your system lacks gettimeofday(2) you don't get gettimeofday() or the one-arg form of tv_interval(). If you don't have usleep(3) or select(2) you don't get usleep() or sleep(). If your system don't have ualarm(3) -or setitimer(2) you don't -get ualarm() or alarm(). If you try to import an unimplemented function -in the C statement it will fail at compile time. +or setitimer(2) you don't get ualarm() or alarm(). +If you try to import an unimplemented function in the C statement +it will fail at compile time. -The following functions can be imported from this module. No -functions are exported by default. +The following functions can be imported from this module. +No functions are exported by default. =over 4 @@ -100,7 +113,9 @@ Time::HiRes::sleep() below. Issues a ualarm call; interval_useconds is optional and will be 0 if unspecified, resulting in alarm-like behaviour. -=item tv_interval ( $ref_to_gettimeofday [, $ref_to_later_gettimeofday] ) +=item tv_interval + +S Returns the floating seconds between the two times, which should have been returned by gettimeofday(). If the second argument is omitted, then the @@ -112,6 +127,19 @@ Returns a floating seconds since the epoch. This function can be imported, resulting in a nice drop-in replacement for the C