home *** CD-ROM | disk | FTP | other *** search
Wrap
<HTML> <HEAD> <TITLE>Time::HiRes - High resolution ualarm, usleep, and gettimeofday</TITLE> <LINK REL="stylesheet" HREF="../../../Active.css" TYPE="text/css"> <LINK REV="made" HREF="mailto:"> </HEAD> <BODY> <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%> <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc"> <STRONG><P CLASS=block> Time::HiRes - High resolution ualarm, usleep, and gettimeofday</P></STRONG> </TD></TR> </TABLE> <A NAME="__index__"></A> <!-- INDEX BEGIN --> <UL> <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI> <LI><A HREF="#synopsis">SYNOPSIS</A></LI> <LI><A HREF="#description">DESCRIPTION</A></LI> <LI><A HREF="#examples">EXAMPLES</A></LI> <LI><A HREF="#c api">C API</A></LI> <LI><A HREF="#authors">AUTHORS</A></LI> <LI><A HREF="#revision">REVISION</A></LI> <LI><A HREF="#copyright">COPYRIGHT</A></LI> </UL> <!-- INDEX END --> <HR> <P> <H1><A NAME="name">NAME</A></H1> <P>Time::HiRes - High resolution ualarm, usleep, and gettimeofday</P> <P> <HR> <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1> <UL> <LI>Linux</LI> <LI>Solaris</LI> <LI>Windows</LI> </UL> <HR> <H1><A NAME="synopsis">SYNOPSIS</A></H1> <PRE> use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );</PRE> <PRE> usleep ($microseconds);</PRE> <PRE> ualarm ($microseconds); ualarm ($microseconds, $interval_microseconds);</PRE> <PRE> $t0 = [gettimeofday]; ($seconds, $microseconds) = gettimeofday;</PRE> <PRE> $elapsed = tv_interval ( $t0, [$seconds, $microseconds]); $elapsed = tv_interval ( $t0, [gettimeofday]); $elapsed = tv_interval ( $t0 );</PRE> <PRE> use Time::HiRes qw ( time alarm sleep ); $now_fractions = time; sleep ($floating_seconds); alarm ($floating_seconds); alarm ($floating_seconds, $floating_interval);</PRE> <P> <HR> <H1><A NAME="description">DESCRIPTION</A></H1> <P>The <CODE>Time::HiRes</CODE> module implements a Perl interface to the usleep, ualarm, and gettimeofday system calls. See the EXAMPLES section below and the test scripts for usage; see your system documentation for the description of the underlying gettimeofday, usleep, and ualarm calls.</P> <P>If your system lacks <A HREF="#item_gettimeofday"><CODE>gettimeofday(2)</CODE></A> you don't get <A HREF="#item_gettimeofday"><CODE>gettimeofday()</CODE></A> or the one-arg form of tv_interval(). If you don't have <A HREF="#item_usleep"><CODE>usleep(3)</CODE></A> or <A HREF="../../../lib/Pod/perlfunc.html#item_select"><CODE>select(2)</CODE></A> you don't get <A HREF="#item_usleep"><CODE>usleep()</CODE></A> or sleep(). If your system don't have <A HREF="#item_ualarm"><CODE>ualarm(3)</CODE></A> or <CODE>setitimer(2)</CODE> you don't get <A HREF="#item_ualarm"><CODE>ualarm()</CODE></A> or alarm(). If you try to import an unimplemented function in the <A HREF="../../../lib/Pod/perlfunc.html#item_use"><CODE>use</CODE></A> statement it will fail at compile time.</P> <P>The following functions can be imported from this module. No functions are exported by default.</P> <DL> <DT><STRONG><A NAME="item_gettimeofday">gettimeofday ()</A></STRONG><BR> <DD> In array context it returns a 2 element array with the seconds and microseconds since the epoch. In scalar context it returns floating seconds like Time::HiRes::time() (see below). <P></P> <DT><STRONG><A NAME="item_usleep">usleep ( $useconds )</A></STRONG><BR> <DD> Issues a usleep for the number of microseconds specified. See also Time::HiRes::sleep() below. <P></P> <DT><STRONG><A NAME="item_ualarm">ualarm ( $useconds [, $interval_useconds ] )</A></STRONG><BR> <DD> Issues a ualarm call; interval_useconds is optional and will be 0 if unspecified, resulting in alarm-like behaviour. <P></P> <DT><STRONG><A NAME="item_tv_interval">tv_interval ( $ref_to_gettimeofday [, $ref_to_later_gettimeofday] )</A></STRONG><BR> <DD> Returns the floating seconds between the two times, which should have been returned by gettimeofday(). If the second argument is omitted, then the current time is used. <P></P> <DT><STRONG><A NAME="item_time">time ()</A></STRONG><BR> <DD> Returns a floating seconds since the epoch. This function can be imported, resulting in a nice drop-in replacement for the <A HREF="#item_time"><CODE>time</CODE></A> provided with perl, see the EXAMPLES below. <P></P> <DT><STRONG><A NAME="item_sleep">sleep ( $floating_seconds )</A></STRONG><BR> <DD> Converts $floating_seconds to microseconds and issues a usleep for the result. This function can be imported, resulting in a nice drop-in replacement for the <A HREF="#item_sleep"><CODE>sleep</CODE></A> provided with perl, see the EXAMPLES below. <P></P> <DT><STRONG><A NAME="item_alarm">alarm ( $floating_seconds [, $interval_floating_seconds ] )</A></STRONG><BR> <DD> Converts $floating_seconds and $interval_floating_seconds and issues a ualarm for the results. The $interval_floating_seconds argument is optional and will be 0 if unspecified, resulting in alarm-like behaviour. This function can be imported, resulting in a nice drop-in replacement for the <A HREF="#item_alarm"><CODE>alarm</CODE></A> provided with perl, see the EXAMPLES below. <P></P></DL> <P> <HR> <H1><A NAME="examples">EXAMPLES</A></H1> <PRE> use Time::HiRes qw(usleep ualarm gettimeofday tv_interval);</PRE> <PRE> $microseconds = 750_000; usleep $microseconds;</PRE> <PRE> # signal alarm in 2.5s & every .1s thereafter ualarm 2_500_000, 100_000;</PRE> <PRE> # get seconds and microseconds since the epoch ($s, $usec) = gettimeofday;</PRE> <PRE> # measure elapsed time # (could also do by subtracting 2 gettimeofday return values) $t0 = [gettimeofday]; # do bunch of stuff here $t1 = [gettimeofday]; # do more stuff here $t0_t1 = tv_interval $t0, $t1; </PRE> <PRE> $elapsed = tv_interval ($t0, [gettimeofday]); $elapsed = tv_interval ($t0); # equivalent code</PRE> <PRE> # # replacements for time, alarm and sleep that know about # floating seconds # use Time::HiRes; $now_fractions = Time::HiRes::time; Time::HiRes::sleep (2.5); Time::HiRes::alarm (10.6666666); </PRE> <PRE> use Time::HiRes qw ( time alarm sleep ); $now_fractions = time; sleep (2.5); alarm (10.6666666);</PRE> <P> <HR> <H1><A NAME="c api">C API</A></H1> <P>In addition to the perl API described above, a C API is available for extension writers. The following C functions are available in the modglobal hash:</P> <PRE> name C prototype --------------- ---------------------- Time::NVtime double (*)() Time::U2time void (*)(UV ret[2])</PRE> <P>Both functions return equivalent information (like <A HREF="#item_gettimeofday"><CODE>gettimeofday</CODE></A>) but with different representations. The names <CODE>NVtime</CODE> and <CODE>U2time</CODE> were selected mainly because they are operating system independent. (<A HREF="#item_gettimeofday"><CODE>gettimeofday</CODE></A> is Un*x-centric.)</P> <P>Here is an example of using NVtime from C:</P> <PRE> double (*myNVtime)(); SV **svp = hv_fetch(PL_modglobal, "Time::NVtime", 12, 0); if (!svp) croak("Time::HiRes is required"); if (!SvIOK(*svp)) croak("Time::NVtime isn't a function pointer"); myNVtime = (double(*)()) SvIV(*svp); printf("The current time is: %f\n", (*myNVtime)());</PRE> <P> <HR> <H1><A NAME="authors">AUTHORS</A></H1> <P>D. Wegscheid <<A HREF="mailto:wegscd@whirlpool.com">wegscd@whirlpool.com</A>> R. Schertler <<A HREF="mailto:roderick@argon.org">roderick@argon.org</A>> J. Hietaniemi <<A HREF="mailto:jhi@iki.fi">jhi@iki.fi</A>> G. Aas <<A HREF="mailto:gisle@aas.no">gisle@aas.no</A>></P> <P> <HR> <H1><A NAME="revision">REVISION</A></H1> <P>$Id: HiRes.pm,v 1.20 1999/03/16 02:26:13 wegscd Exp $</P> <P>$Log: HiRes.pm,v $ Revision 1.20 1999/03/16 02:26:13 wegscd Add documentation for NVTime and U2Time.</P> <P>Revision 1.19 1998/09/30 02:34:42 wegscd No changes, bump version.</P> <P>Revision 1.18 1998/07/07 02:41:35 wegscd No changes, bump version.</P> <P>Revision 1.17 1998/07/02 01:45:13 wegscd Bump version to 1.17</P> <P>Revision 1.16 1997/11/13 02:06:36 wegscd version bump to accomodate HiRes.xs fix.</P> <P>Revision 1.15 1997/11/11 02:17:59 wegscd POD editing, courtesy of Gisle Aas.</P> <P>Revision 1.14 1997/11/06 03:14:35 wegscd Update version # for Makefile.PL and HiRes.xs changes.</P> <P>Revision 1.13 1997/11/05 05:36:25 wegscd change version # for Makefile.pl and HiRes.xs changes.</P> <P>Revision 1.12 1997/10/13 20:55:33 wegscd Force a new version for Makefile.PL changes.</P> <P>Revision 1.11 1997/09/05 19:59:33 wegscd New version to bump version for README and Makefile.PL fixes. Fix bad RCS log.</P> <P>Revision 1.10 1997/05/23 01:11:38 wegscd Conditional compilation; EXPORT_FAIL fixes.</P> <P>Revision 1.2 1996/12/30 13:28:40 wegscd Update documentation for what to do when missing <A HREF="#item_ualarm"><CODE>ualarm()</CODE></A> and friends.</P> <P>Revision 1.1 1996/10/17 20:53:31 wegscd Fix =head1 being next to __END__ so pod2man works</P> <P>Revision 1.0 1996/09/03 18:25:15 wegscd Initial revision</P> <P> <HR> <H1><A NAME="copyright">COPYRIGHT</A></H1> <P>Copyright (c) 1996-1997 Douglas E. Wegscheid. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</P> <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%> <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc"> <STRONG><P CLASS=block> Time::HiRes - High resolution ualarm, usleep, and gettimeofday</P></STRONG> </TD></TR> </TABLE> </BODY> </HTML>