The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file was generated by Devel::NYTProf version 3.11
-->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="en-us" />
    <title>Profile of /usr/local/lib/perl5/5.10.1/darwin-2level/Time/HiRes.pm</title>
<link rel="stylesheet" type="text/css" href="style.css" />
    <script type="text/javascript" src="js/jquery-min.js"></script> 

    <script type="text/javascript" src="js/jquery-tablesorter-min.js"></script> 
    <link rel="stylesheet" type="text/css" href="js/style-tablesorter.css" />
    <script type="text/javascript">
    // when a column is first clicked on to sort it, use descending order
    // XXX doesn't seem to work (and not just because the tablesorter formatSortingOrder() is broken)
    $.tablesorter.defaults.sortInitialOrder = "desc";
    // add parser through the tablesorter addParser method 
    $.tablesorter.addParser({
        id: 'fmt_time',   // name of this parser
        is: function(s) { 
            return false; // return false so this parser is not auto detected 
        }, 
        format: function(orig) { // format data for normalization 
            // console.log(orig);
            val = orig.replace(/ns/,'');
            if (val != orig) { return val / (1000*1000*1000); } 
            val = orig.replace(/µs/,''); /* XXX use &micro; ? */
            if (val != orig) { return val / (1000*1000); } 
            var val = orig.replace(/ms/,'');
            if (val != orig) { return val / (1000); }
            var val = orig.replace(/s/,'');
            if (val != orig) { return val; }
            if (orig == '0') { return orig; } 
            console.log('no match for fmt_time of '.concat(orig));
            return orig;
        },
        type: 'numeric' // set type, either numeric or text 
    }); 
    </script> 
</head>
<body > 
<div class="header" style="position: relative; overflow-x: hidden; overflow-y: hidden; z-index: 0; ">
<div class="header_back">
            <a href="index.html">&larr; Index</a>
        </div>
<div class="headerForeground" style="float: left">
    <span class="siteTitle">NYTProf Performance Profile</span>
    <span class="siteSubtitle">&emsp;&emsp;<span>&laquo;&emsp;<span class="mode_btn mode_btn_selected">block view</span>&emsp;&bull;&emsp;<span class="mode_btn"><a href="Time-HiRes-pm-line.html">line view</a></span>&emsp;&bull;&emsp;<span class="mode_btn"><a href="Time-HiRes-pm-sub.html">sub view</a></span>&emsp;&raquo;</span><br />
            For 01.HTTP.t
        </span>
</div>
<div class="headerForeground" style="float: right; text-align: right">
    <span class="siteTitle">&nbsp;</span>
    <span class="siteSubtitle">Run on Tue May  4 15:25:55 2010<br />Reported on Tue May  4 15:26:08 2010</span>
</div>
<div style="position: absolute; left: 0px; top: 0%; width: 100%; height: 101%; z-index: -1; background-color: rgb(17, 136, 255); "></div>
<div style="position: absolute; left: 0px; top: 2%; width: 100%; height: 99%; z-index: -1; background-color: rgb(16, 134, 253); "></div>
<div style="position: absolute; left: 0px; top: 4%; width: 100%; height: 97%; z-index: -1; background-color: rgb(16, 133, 252); "></div>
<div style="position: absolute; left: 0px; top: 6%; width: 100%; height: 95%; z-index: -1; background-color: rgb(15, 131, 250); "></div>
<div style="position: absolute; left: 0px; top: 8%; width: 100%; height: 93%; z-index: -1; background-color: rgb(15, 130, 249); "></div>
<div style="position: absolute; left: 0px; top: 10%; width: 100%; height: 91%; z-index: -1; background-color: rgb(15, 129, 248); "></div>
<div style="position: absolute; left: 0px; top: 12%; width: 100%; height: 89%; z-index: -1; background-color: rgb(14, 127, 246); "></div>
<div style="position: absolute; left: 0px; top: 14%; width: 100%; height: 87%; z-index: -1; background-color: rgb(14, 126, 245); "></div>
<div style="position: absolute; left: 0px; top: 16%; width: 100%; height: 85%; z-index: -1; background-color: rgb(14, 125, 244); "></div>
<div style="position: absolute; left: 0px; top: 18%; width: 100%; height: 83%; z-index: -1; background-color: rgb(13, 123, 242); "></div>
<div style="position: absolute; left: 0px; top: 20%; width: 100%; height: 81%; z-index: -1; background-color: rgb(13, 122, 241); "></div>
<div style="position: absolute; left: 0px; top: 22%; width: 100%; height: 79%; z-index: -1; background-color: rgb(13, 121, 240); "></div>
<div style="position: absolute; left: 0px; top: 24%; width: 100%; height: 77%; z-index: -1; background-color: rgb(12, 119, 238); "></div>
<div style="position: absolute; left: 0px; top: 26%; width: 100%; height: 75%; z-index: -1; background-color: rgb(12, 118, 237); "></div>
<div style="position: absolute; left: 0px; top: 28%; width: 100%; height: 73%; z-index: -1; background-color: rgb(12, 116, 235); "></div>
<div style="position: absolute; left: 0px; top: 30%; width: 100%; height: 71%; z-index: -1; background-color: rgb(11, 115, 234); "></div>
<div style="position: absolute; left: 0px; top: 32%; width: 100%; height: 69%; z-index: -1; background-color: rgb(11, 114, 233); "></div>
<div style="position: absolute; left: 0px; top: 34%; width: 100%; height: 67%; z-index: -1; background-color: rgb(11, 112, 231); "></div>
<div style="position: absolute; left: 0px; top: 36%; width: 100%; height: 65%; z-index: -1; background-color: rgb(10, 111, 230); "></div>
<div style="position: absolute; left: 0px; top: 38%; width: 100%; height: 63%; z-index: -1; background-color: rgb(10, 110, 229); "></div>
<div style="position: absolute; left: 0px; top: 40%; width: 100%; height: 61%; z-index: -1; background-color: rgb(10, 108, 227); "></div>
<div style="position: absolute; left: 0px; top: 42%; width: 100%; height: 59%; z-index: -1; background-color: rgb(9, 107, 226); "></div>
<div style="position: absolute; left: 0px; top: 44%; width: 100%; height: 57%; z-index: -1; background-color: rgb(9, 106, 225); "></div>
<div style="position: absolute; left: 0px; top: 46%; width: 100%; height: 55%; z-index: -1; background-color: rgb(9, 104, 223); "></div>
<div style="position: absolute; left: 0px; top: 48%; width: 100%; height: 53%; z-index: -1; background-color: rgb(8, 103, 222); "></div>
<div style="position: absolute; left: 0px; top: 50%; width: 100%; height: 51%; z-index: -1; background-color: rgb(8, 102, 221); "></div>
<div style="position: absolute; left: 0px; top: 52%; width: 100%; height: 49%; z-index: -1; background-color: rgb(8, 100, 219); "></div>
<div style="position: absolute; left: 0px; top: 54%; width: 100%; height: 47%; z-index: -1; background-color: rgb(7, 99, 218); "></div>
<div style="position: absolute; left: 0px; top: 56%; width: 100%; height: 45%; z-index: -1; background-color: rgb(7, 97, 216); "></div>
<div style="position: absolute; left: 0px; top: 58%; width: 100%; height: 43%; z-index: -1; background-color: rgb(7, 96, 215); "></div>
<div style="position: absolute; left: 0px; top: 60%; width: 100%; height: 41%; z-index: -1; background-color: rgb(6, 95, 214); "></div>
<div style="position: absolute; left: 0px; top: 62%; width: 100%; height: 39%; z-index: -1; background-color: rgb(6, 93, 212); "></div>
<div style="position: absolute; left: 0px; top: 64%; width: 100%; height: 37%; z-index: -1; background-color: rgb(6, 92, 211); "></div>
<div style="position: absolute; left: 0px; top: 66%; width: 100%; height: 35%; z-index: -1; background-color: rgb(5, 91, 210); "></div>
<div style="position: absolute; left: 0px; top: 68%; width: 100%; height: 33%; z-index: -1; background-color: rgb(5, 89, 208); "></div>
<div style="position: absolute; left: 0px; top: 70%; width: 100%; height: 31%; z-index: -1; background-color: rgb(5, 88, 207); "></div>
<div style="position: absolute; left: 0px; top: 72%; width: 100%; height: 29%; z-index: -1; background-color: rgb(4, 87, 206); "></div>
<div style="position: absolute; left: 0px; top: 74%; width: 100%; height: 27%; z-index: -1; background-color: rgb(4, 85, 204); "></div>
<div style="position: absolute; left: 0px; top: 76%; width: 100%; height: 25%; z-index: -1; background-color: rgb(4, 84, 203); "></div>
<div style="position: absolute; left: 0px; top: 78%; width: 100%; height: 23%; z-index: -1; background-color: rgb(3, 82, 201); "></div>
<div style="position: absolute; left: 0px; top: 80%; width: 100%; height: 21%; z-index: -1; background-color: rgb(3, 81, 200); "></div>
<div style="position: absolute; left: 0px; top: 82%; width: 100%; height: 19%; z-index: -1; background-color: rgb(3, 80, 199); "></div>
<div style="position: absolute; left: 0px; top: 84%; width: 100%; height: 17%; z-index: -1; background-color: rgb(2, 78, 197); "></div>
<div style="position: absolute; left: 0px; top: 86%; width: 100%; height: 15%; z-index: -1; background-color: rgb(2, 77, 196); "></div>
<div style="position: absolute; left: 0px; top: 88%; width: 100%; height: 13%; z-index: -1; background-color: rgb(2, 76, 195); "></div>
<div style="position: absolute; left: 0px; top: 90%; width: 100%; height: 11%; z-index: -1; background-color: rgb(1, 74, 193); "></div>
<div style="position: absolute; left: 0px; top: 92%; width: 100%; height: 9%; z-index: -1; background-color: rgb(1, 73, 192); "></div>
<div style="position: absolute; left: 0px; top: 94%; width: 100%; height: 7%; z-index: -1; background-color: rgb(1, 72, 191); "></div>
<div style="position: absolute; left: 0px; top: 96%; width: 100%; height: 5%; z-index: -1; background-color: rgb(0, 70, 189); "></div>
<div style="position: absolute; left: 0px; top: 98%; width: 100%; height: 3%; z-index: -1; background-color: rgb(0, 69, 188); "></div>
<div style="position: absolute; left: 0px; top: 100%; width: 100%; height: 1%; z-index: -1; background-color: rgb(0, 68, 187); "></div>
</div>

<div class="body_content">
<br />
<table>
<tr>
<td class="h" align="right">File</td>
<td align="left">/usr/local/lib/perl5/5.10.1/darwin-2level/Time/HiRes.pm</td>
</tr>
<tr>
<td class="h" align="right">Statements Executed</td>
<td align="left">32</td>
</tr>
<tr>
<td class="h" align="right">Statement Execution Time</td>
<td align="left">481&micro;s</td>
</tr>
</table>

        
        <table id="subs_table" border="1" cellpadding="0" class="tablesorter">
        <caption>Subroutines &mdash; ordered by exclusive time</caption>
        <thead>
        <tr>
        <th>Calls</th>
        <th><span title="Number of Places sub is called from">P</span></th>
        <th><span title="Number of Files sub is called from">F</span></th>
        <th>Exclusive<br />Time</th>
        <th>Inclusive<br />Time</th>
        <th>Subroutine</th>
        </tr>
        </thead>
    <tbody>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c1">2</td><td class="c0"><span title="0.0%">66&micro;s</span></td><td class="c0"><span title="0.0%">66&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::bootstrap</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#Time__HiRes__bootstrap">bootstrap</a>&nbsp;(xsub)</span></td></tr>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c3">1</td><td class="c0"><span title="0.0%">23&micro;s</span></td><td class="c0"><span title="0.0%">248&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::import</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#48">import</a></span></td></tr>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c3">1</td><td class="c0"><span title="0.0%">21&micro;s</span></td><td class="c2"><span title="0.0%">33&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::AUTOLOAD</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#30">AUTOLOAD</a></span></td></tr>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c3">1</td><td class="c1"><span title="0.0%">13&micro;s</span></td><td class="c3"><span title="0.0%">16&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::BEGIN@3</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#3">BEGIN@3</a></span></td></tr>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c1">2</td><td class="c3"><span title="0.0%">8&micro;s</span></td><td class="c3"><span title="0.0%">8&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::constant</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#Time__HiRes__constant">constant</a>&nbsp;(xsub)</span></td></tr>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c3">1</td><td class="c3"><span title="0.0%">7&micro;s</span></td><td class="c0"><span title="0.0%">94&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::BEGIN@4</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#4">BEGIN@4</a></span></td></tr>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c3">1</td><td class="c3"><span title="0.0%">7&micro;s</span></td><td class="c3"><span title="0.0%">18&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::BEGIN@42</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#42">BEGIN@42</a></span></td></tr>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c1">2</td><td class="c3"><span title="0.0%">4&micro;s</span></td><td class="c3"><span title="0.0%">4&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::CORE:subst</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#Time__HiRes__CORE_subst">CORE:subst</a>&nbsp;(opcode)</span></td></tr>
<tr><td class="c3">1</td><td class="c3">1</td><td class="c3">1</td><td class="c3"><span title="0.0%">1&micro;s</span></td><td class="c3"><span title="0.0%">1&micro;s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::__ANON__[:43]</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#43">__ANON__[:43]</a></span></td></tr>
<tr><td class="c3">0</td><td class="c3">0</td><td class="c3">0</td><td class="c3"><span title="0.0%">0s</span></td><td class="c3"><span title="0.0%">0s</span></td><td class="sub_name"><span style="display: none;">Time::HiRes::::tv_interval</span>Time::HiRes::<a href="Time-HiRes-pm-block.html#69">tv_interval</a></span></td></tr>

        </tbody>
        </table>
    
        Call graph for these subroutines as a <a href="http://en.wikipedia.org/wiki/Graphviz">Graphviz</a> <a href="usr-local-lib-perl5-5-10-1-darwin-2level-Time-HiRes-pm.dot">dot language file</a>.
      <table border="1" cellpadding="0">
      <thead>
      <tr><th>Line</th>
      <th><span title="Number of statements executed">State<br />ments</span></th>
      <th><span title="Time spend executing statements on the line,
        excluding time spent executing statements in any called subroutines">Time<br />on line</span></th>
      <th><span title="Number of subroutines calls">Calls</span></th>
      <th><span title="Time spent in subroutines called">Time<br />in subs</span></th>
      <th class="left_indent_header">Code</th>
      </tr>

      </thead>
      <tbody>
    <tr><td class="h"><a name="1"></a>1</td><td></td><td></td><td></td><td></td><td class="s">package Time::HiRes;</td></tr>
<tr><td class="h"><a name="2"></a>2</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="3"></a>3</td><td class="c0">3</td><td class="c0"><span title="Avg 8&micro;s">24&micro;s</span></td><td class="c3">2</td><td class="c3">20&micro;s</td><td class="s"><div class="calls"><div class="calls_in"># spent 16&micro;s (13+3) within Time::HiRes::BEGIN@3 which was called
#    once (13&micro;s+3&micro;s) by SimpleDB::Client::BEGIN@51 at <a href="Time-HiRes-pm-block.html#3">line 3</a></div></div>use strict;<div class="calls"><div class="calls_out"># spent    16&micro;s making 1 call to <a href="Time-HiRes-pm-block.html#3">Time::HiRes::BEGIN@3</a>
# spent     3&micro;s making 1 call to <a href="strict-pm-block.html#34">strict::import</a></div></div></td></tr>
<tr><td class="h"><a name="4"></a>4</td><td class="c0">3</td><td class="c0"><span title="Avg 46&micro;s">139&micro;s</span></td><td class="c3">2</td><td class="c0">180&micro;s</td><td class="s"><div class="calls"><div class="calls_in"># spent 94&micro;s (7+86) within Time::HiRes::BEGIN@4 which was called
#    once (7&micro;s+86&micro;s) by SimpleDB::Client::BEGIN@51 at <a href="Time-HiRes-pm-block.html#4">line 4</a></div></div>use vars qw($VERSION $XS_VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD);<div class="calls"><div class="calls_out"># spent    94&micro;s making 1 call to <a href="Time-HiRes-pm-block.html#4">Time::HiRes::BEGIN@4</a>
# spent    86&micro;s making 1 call to <a href="vars-pm-block.html#10">vars::import</a></div></div></td></tr>
<tr><td class="h"><a name="5"></a>5</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="6"></a>6</td><td class="c3">1</td><td class="c3"><span title="Avg 600ns">600ns</span></td><td></td><td></td><td class="s">require Exporter;</td></tr>
<tr><td class="h"><a name="7"></a>7</td><td class="c3">1</td><td class="c3"><span title="Avg 900ns">900ns</span></td><td></td><td></td><td class="s">require DynaLoader;</td></tr>
<tr><td class="h"><a name="8"></a>8</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="9"></a>9</td><td class="c3">1</td><td class="c1"><span title="Avg 13&micro;s">13&micro;s</span></td><td></td><td></td><td class="s">@ISA = qw(Exporter DynaLoader);</td></tr>
<tr><td class="h"><a name="10"></a>10</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="11"></a>11</td><td class="c3">1</td><td class="c3"><span title="Avg 200ns">200ns</span></td><td></td><td></td><td class="s">@EXPORT = qw( );</td></tr>
<tr><td class="h"><a name="12"></a>12</td><td class="c3">1</td><td class="c3"><span title="Avg 6&micro;s">6&micro;s</span></td><td></td><td></td><td class="s">@EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval</td></tr>
<tr><td class="h"><a name="13"></a>13</td><td></td><td></td><td></td><td></td><td class="s">                 getitimer setitimer nanosleep clock_gettime clock_getres</td></tr>
<tr><td class="h"><a name="14"></a>14</td><td></td><td></td><td></td><td></td><td class="s">                 clock clock_nanosleep</td></tr>
<tr><td class="h"><a name="15"></a>15</td><td></td><td></td><td></td><td></td><td class="s">                 CLOCK_HIGHRES CLOCK_MONOTONIC CLOCK_PROCESS_CPUTIME_ID</td></tr>
<tr><td class="h"><a name="16"></a>16</td><td></td><td></td><td></td><td></td><td class="s">                 CLOCK_REALTIME CLOCK_SOFTTIME CLOCK_THREAD_CPUTIME_ID</td></tr>
<tr><td class="h"><a name="17"></a>17</td><td></td><td></td><td></td><td></td><td class="s">                 CLOCK_TIMEOFDAY CLOCKS_PER_SEC</td></tr>
<tr><td class="h"><a name="18"></a>18</td><td></td><td></td><td></td><td></td><td class="s">                 ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ITIMER_REALPROF</td></tr>
<tr><td class="h"><a name="19"></a>19</td><td></td><td></td><td></td><td></td><td class="s">                 TIMER_ABSTIME</td></tr>
<tr><td class="h"><a name="20"></a>20</td><td></td><td></td><td></td><td></td><td class="s">                 d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer</td></tr>
<tr><td class="h"><a name="21"></a>21</td><td></td><td></td><td></td><td></td><td class="s">                 d_nanosleep d_clock_gettime d_clock_getres</td></tr>
<tr><td class="h"><a name="22"></a>22</td><td></td><td></td><td></td><td></td><td class="s">                 d_clock d_clock_nanosleep</td></tr>
<tr><td class="h"><a name="23"></a>23</td><td></td><td></td><td></td><td></td><td class="s">                 stat</td></tr>
<tr><td class="h"><a name="24"></a>24</td><td></td><td></td><td></td><td></td><td class="s">                );</td></tr>
<tr><td class="h"><a name="25"></a>25</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="26"></a>26</td><td class="c3">1</td><td class="c3"><span title="Avg 5&micro;s">5&micro;s</span></td><td></td><td></td><td class="s">$VERSION = '1.9719';</td></tr>
<tr><td class="h"><a name="27"></a>27</td><td class="c3">1</td><td class="c3"><span title="Avg 200ns">200ns</span></td><td></td><td></td><td class="s">$XS_VERSION = $VERSION;</td></tr>
<tr><td class="h"><a name="28"></a>28</td><td class="c3">1</td><td class="c1"><span title="Avg 16&micro;s">16&micro;s</span></td><td></td><td></td><td class="s">$VERSION = eval $VERSION;</td></tr>
<tr><td class="h"><a name="29"></a>29</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="30"></a>30</td><td></td><td></td><td></td><td></td><td class="s"><div class="calls"><div class="calls_in"># spent 33&micro;s (21+11) within Time::HiRes::AUTOLOAD which was called
#    once (21&micro;s+11&micro;s) by Time::HiRes::import at <a href="Time-HiRes-pm-block.html#51">line 51</a></div></div>sub AUTOLOAD {</td></tr>
<tr><td class="h"><a name="31"></a>31</td><td class="c0">7</td><td class="c0"><span title="Avg 4&micro;s">29&micro;s</span></td><td></td><td></td><td class="s">    my $constname;</td></tr>
<tr><td class="h"><a name="32"></a>32</td><td></td><td></td><td></td><td></td><td class="s">    ($constname = $AUTOLOAD) =~ s/.*:://;<div class="calls"><div class="calls_out">    # spent     4&micro;s making 1 call to <a href="Time-HiRes-pm-block.html#Time__HiRes__CORE_subst">Time::HiRes::CORE:subst</a></div></div></td></tr>
<tr><td class="h"><a name="33"></a>33</td><td></td><td></td><td></td><td></td><td class="s">    # print &quot;AUTOLOAD: constname = $constname ($AUTOLOAD)\n&quot;;</td></tr>
<tr><td class="h"><a name="34"></a>34</td><td></td><td></td><td></td><td></td><td class="s">    die &quot;&amp;Time::HiRes::constant not defined&quot; if $constname eq 'constant';</td></tr>
<tr><td class="h"><a name="35"></a>35</td><td></td><td></td><td></td><td></td><td class="s">    my ($error, $val) = constant($constname);<div class="calls"><div class="calls_out">    # spent     8&micro;s making 1 call to <a href="Time-HiRes-pm-block.html#Time__HiRes__constant">Time::HiRes::constant</a></div></div></td></tr>
<tr><td class="h"><a name="36"></a>36</td><td></td><td></td><td></td><td></td><td class="s">    # print &quot;AUTOLOAD: error = $error, val = $val\n&quot;;</td></tr>
<tr><td class="h"><a name="37"></a>37</td><td></td><td></td><td></td><td></td><td class="s">    if ($error) {</td></tr>
<tr><td class="h"><a name="38"></a>38</td><td></td><td></td><td></td><td></td><td class="s">        my (undef,$file,$line) = caller;</td></tr>
<tr><td class="h"><a name="39"></a>39</td><td></td><td></td><td></td><td></td><td class="s">        die &quot;$error at $file line $line.\n&quot;;</td></tr>
<tr><td class="h"><a name="40"></a>40</td><td></td><td></td><td></td><td></td><td class="s">    }</td></tr>
<tr><td class="h"><a name="41"></a>41</td><td></td><td></td><td></td><td></td><td class="s">    {</td></tr>
<tr><td class="h"><a name="42"></a>42</td><td class="c0">3</td><td class="c0"><span title="Avg 66&micro;s">199&micro;s</span></td><td class="c3">2</td><td class="c3">30&micro;s</td><td class="s"><div class="calls"><div class="calls_in"># spent 18&micro;s (7+11) within Time::HiRes::BEGIN@42 which was called
#    once (7&micro;s+11&micro;s) by SimpleDB::Client::BEGIN@51 at <a href="Time-HiRes-pm-block.html#42">line 42</a></div></div>        no strict 'refs';<div class="calls"><div class="calls_out">        # spent    18&micro;s making 1 call to <a href="Time-HiRes-pm-block.html#42">Time::HiRes::BEGIN@42</a>
        # spent    11&micro;s making 1 call to <a href="strict-pm-block.html#39">strict::unimport</a></div></div></td></tr>
<tr><td class="h"><a name="43"></a>43</td><td class="c1">2</td><td class="c3"><span title="Avg 3&micro;s">6&micro;s</span></td><td></td><td></td><td class="s"><div class="calls"><div class="calls_in"># spent 1&micro;s within Time::HiRes::__ANON__[/usr/local/lib/perl5/5.10.1/darwin-2level/Time/HiRes.pm:43] which was called
#    once (1&micro;s+0s) by Time::HiRes::import at <a href="Time-HiRes-pm-block.html#45">line 45</a></div></div>        *$AUTOLOAD = sub { $val };</td></tr>
<tr><td class="h"><a name="44"></a>44</td><td></td><td></td><td></td><td></td><td class="s">    }</td></tr>
<tr><td class="h"><a name="45"></a>45</td><td></td><td></td><td></td><td></td><td class="s">    goto &amp;$AUTOLOAD;<div class="calls"><div class="calls_out">    # spent     1&micro;s making 1 call to <a href="Time-HiRes-pm-block.html#43">Time::HiRes::__ANON__[Time/HiRes.pm:43]</a></div></div></td></tr>
<tr><td class="h"><a name="46"></a>46</td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h"><a name="47"></a>47</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="48"></a>48</td><td></td><td></td><td></td><td></td><td class="s"><div class="calls"><div class="calls_in"># spent 248&micro;s (23+225) within Time::HiRes::import which was called
#    once (23&micro;s+225&micro;s) by SimpleDB::Client::BEGIN@51 at <a href="lib-SimpleDB-Client-pm-block.html#51">line 51 of ../lib/SimpleDB/Client.pm</a></div></div>sub import {</td></tr>
<tr><td class="h"><a name="49"></a>49</td><td class="c0">3</td><td class="c3"><span title="Avg 3&micro;s">9&micro;s</span></td><td></td><td></td><td class="s">    my $this = shift;</td></tr>
<tr><td class="h"><a name="50"></a>50</td><td></td><td></td><td></td><td></td><td class="s">    for my $i (@_) {</td></tr>
<tr><td class="h"><a name="51"></a>51</td><td class="c3">1</td><td class="c3"><span title="Avg 7&micro;s">7&micro;s</span></td><td class="c3">1</td><td class="c3">33&micro;s</td><td class="s">        if (($i eq 'clock_getres'    &amp;&amp; !&amp;d_clock_getres)    ||<div class="calls"><div class="calls_out">        # spent    33&micro;s making 1 call to <a href="Time-HiRes-pm-block.html#30">Time::HiRes::AUTOLOAD</a></div></div></td></tr>
<tr><td class="h"><a name="52"></a>52</td><td></td><td></td><td></td><td></td><td class="s">            ($i eq 'clock_gettime'   &amp;&amp; !&amp;d_clock_gettime)   ||</td></tr>
<tr><td class="h"><a name="53"></a>53</td><td></td><td></td><td></td><td></td><td class="s">            ($i eq 'clock_nanosleep' &amp;&amp; !&amp;d_clock_nanosleep) ||</td></tr>
<tr><td class="h"><a name="54"></a>54</td><td></td><td></td><td></td><td></td><td class="s">            ($i eq 'clock'           &amp;&amp; !&amp;d_clock)           ||</td></tr>
<tr><td class="h"><a name="55"></a>55</td><td></td><td></td><td></td><td></td><td class="s">            ($i eq 'nanosleep'       &amp;&amp; !&amp;d_nanosleep)       ||</td></tr>
<tr><td class="h"><a name="56"></a>56</td><td></td><td></td><td></td><td></td><td class="s">            ($i eq 'usleep'          &amp;&amp; !&amp;d_usleep)          ||</td></tr>
<tr><td class="h"><a name="57"></a>57</td><td></td><td></td><td></td><td></td><td class="s">            ($i eq 'ualarm'          &amp;&amp; !&amp;d_ualarm)) {</td></tr>
<tr><td class="h"><a name="58"></a>58</td><td></td><td></td><td></td><td></td><td class="s">            require Carp;</td></tr>
<tr><td class="h"><a name="59"></a>59</td><td></td><td></td><td></td><td></td><td class="s">            Carp::croak(&quot;Time::HiRes::$i(): unimplemented in this platform&quot;);</td></tr>
<tr><td class="h"><a name="60"></a>60</td><td></td><td></td><td></td><td></td><td class="s">        }</td></tr>
<tr><td class="h"><a name="61"></a>61</td><td></td><td></td><td></td><td></td><td class="s">    }</td></tr>
<tr><td class="h"><a name="62"></a>62</td><td></td><td></td><td></td><td></td><td class="s">    Time::HiRes-&gt;export_to_level(1, $this, @_);<div class="calls"><div class="calls_out">    # spent    23&micro;s making 1 call to <a href="Exporter-pm-block.html#81">Exporter::export_to_level</a></div></div></td></tr>
<tr><td class="h"><a name="63"></a>63</td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h"><a name="64"></a>64</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="65"></a>65</td><td class="c3">1</td><td class="c3"><span title="Avg 6&micro;s">6&micro;s</span></td><td class="c3">1</td><td class="c0">351&micro;s</td><td class="s">bootstrap Time::HiRes;<div class="calls"><div class="calls_out"># spent   351&micro;s making 1 call to <a href="DynaLoader-pm-block.html#116">DynaLoader::bootstrap</a></div></div></td></tr>
<tr><td class="h"><a name="66"></a>66</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="67"></a>67</td><td></td><td></td><td></td><td></td><td class="s"># Preloaded methods go here.</td></tr>
<tr><td class="h"><a name="68"></a>68</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="69"></a>69</td><td></td><td></td><td></td><td></td><td class="s">sub tv_interval {</td></tr>
<tr><td class="h"><a name="70"></a>70</td><td></td><td></td><td></td><td></td><td class="s">    # probably could have been done in C</td></tr>
<tr><td class="h"><a name="71"></a>71</td><td></td><td></td><td></td><td></td><td class="s">    my ($a, $b) = @_;</td></tr>
<tr><td class="h"><a name="72"></a>72</td><td></td><td></td><td></td><td></td><td class="s">    $b = [gettimeofday()] unless defined($b);</td></tr>
<tr><td class="h"><a name="73"></a>73</td><td></td><td></td><td></td><td></td><td class="s">    (${$b}[0] - ${$a}[0]) + ((${$b}[1] - ${$a}[1]) / 1_000_000);</td></tr>
<tr><td class="h"><a name="74"></a>74</td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h"><a name="75"></a>75</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="76"></a>76</td><td></td><td></td><td></td><td></td><td class="s"># Autoload methods go after =cut, and are processed by the autosplit program.</td></tr>
<tr><td class="h"><a name="77"></a>77</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="78"></a>78</td><td class="c3">1</td><td class="c0"><span title="Avg 20&micro;s">20&micro;s</span></td><td></td><td></td><td class="s">1;</td></tr>
<tr><td class="h"><a name="79"></a>79</td><td></td><td></td><td></td><td></td><td class="s">__END__</td></tr>
<tr><td class="h"><a name="80"></a>80</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="81"></a>81</td><td></td><td></td><td></td><td></td><td class="s">=head1 NAME</td></tr>
<tr><td class="h"><a name="82"></a>82</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="83"></a>83</td><td></td><td></td><td></td><td></td><td class="s">Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers</td></tr>
<tr><td class="h"><a name="84"></a>84</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="85"></a>85</td><td></td><td></td><td></td><td></td><td class="s">=head1 SYNOPSIS</td></tr>
<tr><td class="h"><a name="86"></a>86</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="87"></a>87</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep</td></tr>
<tr><td class="h"><a name="88"></a>88</td><td></td><td></td><td></td><td></td><td class="s">                      clock_gettime clock_getres clock_nanosleep clock</td></tr>
<tr><td class="h"><a name="89"></a>89</td><td></td><td></td><td></td><td></td><td class="s">                      stat );</td></tr>
<tr><td class="h"><a name="90"></a>90</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="91"></a>91</td><td></td><td></td><td></td><td></td><td class="s">  usleep ($microseconds);</td></tr>
<tr><td class="h"><a name="92"></a>92</td><td></td><td></td><td></td><td></td><td class="s">  nanosleep ($nanoseconds);</td></tr>
<tr><td class="h"><a name="93"></a>93</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="94"></a>94</td><td></td><td></td><td></td><td></td><td class="s">  ualarm ($microseconds);</td></tr>
<tr><td class="h"><a name="95"></a>95</td><td></td><td></td><td></td><td></td><td class="s">  ualarm ($microseconds, $interval_microseconds);</td></tr>
<tr><td class="h"><a name="96"></a>96</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="97"></a>97</td><td></td><td></td><td></td><td></td><td class="s">  $t0 = [gettimeofday];</td></tr>
<tr><td class="h"><a name="98"></a>98</td><td></td><td></td><td></td><td></td><td class="s">  ($seconds, $microseconds) = gettimeofday;</td></tr>
<tr><td class="h"><a name="99"></a>99</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="100"></a>100</td><td></td><td></td><td></td><td></td><td class="s">  $elapsed = tv_interval ( $t0, [$seconds, $microseconds]);</td></tr>
<tr><td class="h"><a name="101"></a>101</td><td></td><td></td><td></td><td></td><td class="s">  $elapsed = tv_interval ( $t0, [gettimeofday]);</td></tr>
<tr><td class="h"><a name="102"></a>102</td><td></td><td></td><td></td><td></td><td class="s">  $elapsed = tv_interval ( $t0 );</td></tr>
<tr><td class="h"><a name="103"></a>103</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="104"></a>104</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw ( time alarm sleep );</td></tr>
<tr><td class="h"><a name="105"></a>105</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="106"></a>106</td><td></td><td></td><td></td><td></td><td class="s">  $now_fractions = time;</td></tr>
<tr><td class="h"><a name="107"></a>107</td><td></td><td></td><td></td><td></td><td class="s">  sleep ($floating_seconds);</td></tr>
<tr><td class="h"><a name="108"></a>108</td><td></td><td></td><td></td><td></td><td class="s">  alarm ($floating_seconds);</td></tr>
<tr><td class="h"><a name="109"></a>109</td><td></td><td></td><td></td><td></td><td class="s">  alarm ($floating_seconds, $floating_interval);</td></tr>
<tr><td class="h"><a name="110"></a>110</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="111"></a>111</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw( setitimer getitimer );</td></tr>
<tr><td class="h"><a name="112"></a>112</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="113"></a>113</td><td></td><td></td><td></td><td></td><td class="s">  setitimer ($which, $floating_seconds, $floating_interval );</td></tr>
<tr><td class="h"><a name="114"></a>114</td><td></td><td></td><td></td><td></td><td class="s">  getitimer ($which);</td></tr>
<tr><td class="h"><a name="115"></a>115</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="116"></a>116</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw( clock_gettime clock_getres clock_nanosleep</td></tr>
<tr><td class="h"><a name="117"></a>117</td><td></td><td></td><td></td><td></td><td class="s">                      ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ITIMER_REALPROF );</td></tr>
<tr><td class="h"><a name="118"></a>118</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="119"></a>119</td><td></td><td></td><td></td><td></td><td class="s">  $realtime   = clock_gettime(CLOCK_REALTIME);</td></tr>
<tr><td class="h"><a name="120"></a>120</td><td></td><td></td><td></td><td></td><td class="s">  $resolution = clock_getres(CLOCK_REALTIME);</td></tr>
<tr><td class="h"><a name="121"></a>121</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="122"></a>122</td><td></td><td></td><td></td><td></td><td class="s">  clock_nanosleep(CLOCK_REALTIME, 1.5e9);</td></tr>
<tr><td class="h"><a name="123"></a>123</td><td></td><td></td><td></td><td></td><td class="s">  clock_nanosleep(CLOCK_REALTIME, time()*1e9 + 10e9, TIMER_ABSTIME);</td></tr>
<tr><td class="h"><a name="124"></a>124</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="125"></a>125</td><td></td><td></td><td></td><td></td><td class="s">  my $ticktock = clock();</td></tr>
<tr><td class="h"><a name="126"></a>126</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="127"></a>127</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw( stat );</td></tr>
<tr><td class="h"><a name="128"></a>128</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="129"></a>129</td><td></td><td></td><td></td><td></td><td class="s">  my @stat = stat(&quot;file&quot;);</td></tr>
<tr><td class="h"><a name="130"></a>130</td><td></td><td></td><td></td><td></td><td class="s">  my @stat = stat(FH);</td></tr>
<tr><td class="h"><a name="131"></a>131</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="132"></a>132</td><td></td><td></td><td></td><td></td><td class="s">=head1 DESCRIPTION</td></tr>
<tr><td class="h"><a name="133"></a>133</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="134"></a>134</td><td></td><td></td><td></td><td></td><td class="s">The C&lt;Time::HiRes&gt; module implements a Perl interface to the</td></tr>
<tr><td class="h"><a name="135"></a>135</td><td></td><td></td><td></td><td></td><td class="s">C&lt;usleep&gt;, C&lt;nanosleep&gt;, C&lt;ualarm&gt;, C&lt;gettimeofday&gt;, and</td></tr>
<tr><td class="h"><a name="136"></a>136</td><td></td><td></td><td></td><td></td><td class="s">C&lt;setitimer&gt;/C&lt;getitimer&gt; system calls, in other words, high</td></tr>
<tr><td class="h"><a name="137"></a>137</td><td></td><td></td><td></td><td></td><td class="s">resolution time and timers. See the L&lt;/EXAMPLES&gt; section below and the</td></tr>
<tr><td class="h"><a name="138"></a>138</td><td></td><td></td><td></td><td></td><td class="s">test scripts for usage; see your system documentation for the</td></tr>
<tr><td class="h"><a name="139"></a>139</td><td></td><td></td><td></td><td></td><td class="s">description of the underlying C&lt;nanosleep&gt; or C&lt;usleep&gt;, C&lt;ualarm&gt;,</td></tr>
<tr><td class="h"><a name="140"></a>140</td><td></td><td></td><td></td><td></td><td class="s">C&lt;gettimeofday&gt;, and C&lt;setitimer&gt;/C&lt;getitimer&gt; calls.</td></tr>
<tr><td class="h"><a name="141"></a>141</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="142"></a>142</td><td></td><td></td><td></td><td></td><td class="s">If your system lacks C&lt;gettimeofday()&gt; or an emulation of it you don't</td></tr>
<tr><td class="h"><a name="143"></a>143</td><td></td><td></td><td></td><td></td><td class="s">get C&lt;gettimeofday()&gt; or the one-argument form of C&lt;tv_interval()&gt;.</td></tr>
<tr><td class="h"><a name="144"></a>144</td><td></td><td></td><td></td><td></td><td class="s">If your system lacks all of C&lt;nanosleep()&gt;, C&lt;usleep()&gt;,</td></tr>
<tr><td class="h"><a name="145"></a>145</td><td></td><td></td><td></td><td></td><td class="s">C&lt;select()&gt;, and C&lt;poll&gt;, you don't get C&lt;Time::HiRes::usleep()&gt;,</td></tr>
<tr><td class="h"><a name="146"></a>146</td><td></td><td></td><td></td><td></td><td class="s">C&lt;Time::HiRes::nanosleep()&gt;, or C&lt;Time::HiRes::sleep()&gt;.</td></tr>
<tr><td class="h"><a name="147"></a>147</td><td></td><td></td><td></td><td></td><td class="s">If your system lacks both C&lt;ualarm()&gt; and C&lt;setitimer()&gt; you don't get</td></tr>
<tr><td class="h"><a name="148"></a>148</td><td></td><td></td><td></td><td></td><td class="s">C&lt;Time::HiRes::ualarm()&gt; or C&lt;Time::HiRes::alarm()&gt;.</td></tr>
<tr><td class="h"><a name="149"></a>149</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="150"></a>150</td><td></td><td></td><td></td><td></td><td class="s">If you try to import an unimplemented function in the C&lt;use&gt; statement</td></tr>
<tr><td class="h"><a name="151"></a>151</td><td></td><td></td><td></td><td></td><td class="s">it will fail at compile time.</td></tr>
<tr><td class="h"><a name="152"></a>152</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="153"></a>153</td><td></td><td></td><td></td><td></td><td class="s">If your subsecond sleeping is implemented with C&lt;nanosleep()&gt; instead</td></tr>
<tr><td class="h"><a name="154"></a>154</td><td></td><td></td><td></td><td></td><td class="s">of C&lt;usleep()&gt;, you can mix subsecond sleeping with signals since</td></tr>
<tr><td class="h"><a name="155"></a>155</td><td></td><td></td><td></td><td></td><td class="s">C&lt;nanosleep()&gt; does not use signals.  This, however, is not portable,</td></tr>
<tr><td class="h"><a name="156"></a>156</td><td></td><td></td><td></td><td></td><td class="s">and you should first check for the truth value of</td></tr>
<tr><td class="h"><a name="157"></a>157</td><td></td><td></td><td></td><td></td><td class="s">C&lt;&amp;Time::HiRes::d_nanosleep&gt; to see whether you have nanosleep, and</td></tr>
<tr><td class="h"><a name="158"></a>158</td><td></td><td></td><td></td><td></td><td class="s">then carefully read your C&lt;nanosleep()&gt; C API documentation for any</td></tr>
<tr><td class="h"><a name="159"></a>159</td><td></td><td></td><td></td><td></td><td class="s">peculiarities.</td></tr>
<tr><td class="h"><a name="160"></a>160</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="161"></a>161</td><td></td><td></td><td></td><td></td><td class="s">If you are using C&lt;nanosleep&gt; for something else than mixing sleeping</td></tr>
<tr><td class="h"><a name="162"></a>162</td><td></td><td></td><td></td><td></td><td class="s">with signals, give some thought to whether Perl is the tool you should</td></tr>
<tr><td class="h"><a name="163"></a>163</td><td></td><td></td><td></td><td></td><td class="s">be using for work requiring nanosecond accuracies.</td></tr>
<tr><td class="h"><a name="164"></a>164</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="165"></a>165</td><td></td><td></td><td></td><td></td><td class="s">Remember that unless you are working on a I&lt;hard realtime&gt; system,</td></tr>
<tr><td class="h"><a name="166"></a>166</td><td></td><td></td><td></td><td></td><td class="s">any clocks and timers will be imprecise, especially so if you are working</td></tr>
<tr><td class="h"><a name="167"></a>167</td><td></td><td></td><td></td><td></td><td class="s">in a pre-emptive multiuser system.  Understand the difference between</td></tr>
<tr><td class="h"><a name="168"></a>168</td><td></td><td></td><td></td><td></td><td class="s">I&lt;wallclock time&gt; and process time (in UNIX-like systems the sum of</td></tr>
<tr><td class="h"><a name="169"></a>169</td><td></td><td></td><td></td><td></td><td class="s">I&lt;user&gt; and I&lt;system&gt; times).  Any attempt to sleep for X seconds will</td></tr>
<tr><td class="h"><a name="170"></a>170</td><td></td><td></td><td></td><td></td><td class="s">most probably end up sleeping B&lt;more&gt; than that, but don't be surpised</td></tr>
<tr><td class="h"><a name="171"></a>171</td><td></td><td></td><td></td><td></td><td class="s">if you end up sleeping slightly B&lt;less&gt;.</td></tr>
<tr><td class="h"><a name="172"></a>172</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="173"></a>173</td><td></td><td></td><td></td><td></td><td class="s">The following functions can be imported from this module.</td></tr>
<tr><td class="h"><a name="174"></a>174</td><td></td><td></td><td></td><td></td><td class="s">No functions are exported by default.</td></tr>
<tr><td class="h"><a name="175"></a>175</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="176"></a>176</td><td></td><td></td><td></td><td></td><td class="s">=over 4</td></tr>
<tr><td class="h"><a name="177"></a>177</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="178"></a>178</td><td></td><td></td><td></td><td></td><td class="s">=item gettimeofday ()</td></tr>
<tr><td class="h"><a name="179"></a>179</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="180"></a>180</td><td></td><td></td><td></td><td></td><td class="s">In array context returns a two-element array with the seconds and</td></tr>
<tr><td class="h"><a name="181"></a>181</td><td></td><td></td><td></td><td></td><td class="s">microseconds since the epoch.  In scalar context returns floating</td></tr>
<tr><td class="h"><a name="182"></a>182</td><td></td><td></td><td></td><td></td><td class="s">seconds like C&lt;Time::HiRes::time()&gt; (see below).</td></tr>
<tr><td class="h"><a name="183"></a>183</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="184"></a>184</td><td></td><td></td><td></td><td></td><td class="s">=item usleep ( $useconds )</td></tr>
<tr><td class="h"><a name="185"></a>185</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="186"></a>186</td><td></td><td></td><td></td><td></td><td class="s">Sleeps for the number of microseconds (millionths of a second)</td></tr>
<tr><td class="h"><a name="187"></a>187</td><td></td><td></td><td></td><td></td><td class="s">specified.  Returns the number of microseconds actually slept.</td></tr>
<tr><td class="h"><a name="188"></a>188</td><td></td><td></td><td></td><td></td><td class="s">Can sleep for more than one second, unlike the C&lt;usleep&gt; system call.</td></tr>
<tr><td class="h"><a name="189"></a>189</td><td></td><td></td><td></td><td></td><td class="s">Can also sleep for zero seconds, which often works like a I&lt;thread yield&gt;.</td></tr>
<tr><td class="h"><a name="190"></a>190</td><td></td><td></td><td></td><td></td><td class="s">See also C&lt;Time::HiRes::usleep()&gt;, C&lt;Time::HiRes::sleep()&gt;, and</td></tr>
<tr><td class="h"><a name="191"></a>191</td><td></td><td></td><td></td><td></td><td class="s">C&lt;Time::HiRes::clock_nanosleep()&gt;.</td></tr>
<tr><td class="h"><a name="192"></a>192</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="193"></a>193</td><td></td><td></td><td></td><td></td><td class="s">Do not expect usleep() to be exact down to one microsecond.</td></tr>
<tr><td class="h"><a name="194"></a>194</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="195"></a>195</td><td></td><td></td><td></td><td></td><td class="s">=item nanosleep ( $nanoseconds )</td></tr>
<tr><td class="h"><a name="196"></a>196</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="197"></a>197</td><td></td><td></td><td></td><td></td><td class="s">Sleeps for the number of nanoseconds (1e9ths of a second) specified.</td></tr>
<tr><td class="h"><a name="198"></a>198</td><td></td><td></td><td></td><td></td><td class="s">Returns the number of nanoseconds actually slept (accurate only to</td></tr>
<tr><td class="h"><a name="199"></a>199</td><td></td><td></td><td></td><td></td><td class="s">microseconds, the nearest thousand of them).  Can sleep for more than</td></tr>
<tr><td class="h"><a name="200"></a>200</td><td></td><td></td><td></td><td></td><td class="s">one second.  Can also sleep for zero seconds, which often works like</td></tr>
<tr><td class="h"><a name="201"></a>201</td><td></td><td></td><td></td><td></td><td class="s">a I&lt;thread yield&gt;.  See also C&lt;Time::HiRes::sleep()&gt;,</td></tr>
<tr><td class="h"><a name="202"></a>202</td><td></td><td></td><td></td><td></td><td class="s">C&lt;Time::HiRes::usleep()&gt;, and C&lt;Time::HiRes::clock_nanosleep()&gt;.</td></tr>
<tr><td class="h"><a name="203"></a>203</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="204"></a>204</td><td></td><td></td><td></td><td></td><td class="s">Do not expect nanosleep() to be exact down to one nanosecond.</td></tr>
<tr><td class="h"><a name="205"></a>205</td><td></td><td></td><td></td><td></td><td class="s">Getting even accuracy of one thousand nanoseconds is good.</td></tr>
<tr><td class="h"><a name="206"></a>206</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="207"></a>207</td><td></td><td></td><td></td><td></td><td class="s">=item ualarm ( $useconds [, $interval_useconds ] )</td></tr>
<tr><td class="h"><a name="208"></a>208</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="209"></a>209</td><td></td><td></td><td></td><td></td><td class="s">Issues a C&lt;ualarm&gt; call; the C&lt;$interval_useconds&gt; is optional and</td></tr>
<tr><td class="h"><a name="210"></a>210</td><td></td><td></td><td></td><td></td><td class="s">will be zero if unspecified, resulting in C&lt;alarm&gt;-like behaviour.</td></tr>
<tr><td class="h"><a name="211"></a>211</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="212"></a>212</td><td></td><td></td><td></td><td></td><td class="s">Returns the remaining time in the alarm in microseconds, or C&lt;undef&gt;</td></tr>
<tr><td class="h"><a name="213"></a>213</td><td></td><td></td><td></td><td></td><td class="s">if an error occurred.</td></tr>
<tr><td class="h"><a name="214"></a>214</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="215"></a>215</td><td></td><td></td><td></td><td></td><td class="s">ualarm(0) will cancel an outstanding ualarm().</td></tr>
<tr><td class="h"><a name="216"></a>216</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="217"></a>217</td><td></td><td></td><td></td><td></td><td class="s">Note that the interaction between alarms and sleeps is unspecified.</td></tr>
<tr><td class="h"><a name="218"></a>218</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="219"></a>219</td><td></td><td></td><td></td><td></td><td class="s">=item tv_interval </td></tr>
<tr><td class="h"><a name="220"></a>220</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="221"></a>221</td><td></td><td></td><td></td><td></td><td class="s">tv_interval ( $ref_to_gettimeofday [, $ref_to_later_gettimeofday] )</td></tr>
<tr><td class="h"><a name="222"></a>222</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="223"></a>223</td><td></td><td></td><td></td><td></td><td class="s">Returns the floating seconds between the two times, which should have</td></tr>
<tr><td class="h"><a name="224"></a>224</td><td></td><td></td><td></td><td></td><td class="s">been returned by C&lt;gettimeofday()&gt;. If the second argument is omitted,</td></tr>
<tr><td class="h"><a name="225"></a>225</td><td></td><td></td><td></td><td></td><td class="s">then the current time is used.</td></tr>
<tr><td class="h"><a name="226"></a>226</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="227"></a>227</td><td></td><td></td><td></td><td></td><td class="s">=item time ()</td></tr>
<tr><td class="h"><a name="228"></a>228</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="229"></a>229</td><td></td><td></td><td></td><td></td><td class="s">Returns a floating seconds since the epoch. This function can be</td></tr>
<tr><td class="h"><a name="230"></a>230</td><td></td><td></td><td></td><td></td><td class="s">imported, resulting in a nice drop-in replacement for the C&lt;time&gt;</td></tr>
<tr><td class="h"><a name="231"></a>231</td><td></td><td></td><td></td><td></td><td class="s">provided with core Perl; see the L&lt;/EXAMPLES&gt; below.</td></tr>
<tr><td class="h"><a name="232"></a>232</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="233"></a>233</td><td></td><td></td><td></td><td></td><td class="s">B&lt;NOTE 1&gt;: This higher resolution timer can return values either less</td></tr>
<tr><td class="h"><a name="234"></a>234</td><td></td><td></td><td></td><td></td><td class="s">or more than the core C&lt;time()&gt;, depending on whether your platform</td></tr>
<tr><td class="h"><a name="235"></a>235</td><td></td><td></td><td></td><td></td><td class="s">rounds the higher resolution timer values up, down, or to the nearest second</td></tr>
<tr><td class="h"><a name="236"></a>236</td><td></td><td></td><td></td><td></td><td class="s">to get the core C&lt;time()&gt;, but naturally the difference should be never</td></tr>
<tr><td class="h"><a name="237"></a>237</td><td></td><td></td><td></td><td></td><td class="s">more than half a second.  See also L&lt;/clock_getres&gt;, if available</td></tr>
<tr><td class="h"><a name="238"></a>238</td><td></td><td></td><td></td><td></td><td class="s">in your system.</td></tr>
<tr><td class="h"><a name="239"></a>239</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="240"></a>240</td><td></td><td></td><td></td><td></td><td class="s">B&lt;NOTE 2&gt;: Since Sunday, September 9th, 2001 at 01:46:40 AM GMT, when</td></tr>
<tr><td class="h"><a name="241"></a>241</td><td></td><td></td><td></td><td></td><td class="s">the C&lt;time()&gt; seconds since epoch rolled over to 1_000_000_000, the</td></tr>
<tr><td class="h"><a name="242"></a>242</td><td></td><td></td><td></td><td></td><td class="s">default floating point format of Perl and the seconds since epoch have</td></tr>
<tr><td class="h"><a name="243"></a>243</td><td></td><td></td><td></td><td></td><td class="s">conspired to produce an apparent bug: if you print the value of</td></tr>
<tr><td class="h"><a name="244"></a>244</td><td></td><td></td><td></td><td></td><td class="s">C&lt;Time::HiRes::time()&gt; you seem to be getting only five decimals, not</td></tr>
<tr><td class="h"><a name="245"></a>245</td><td></td><td></td><td></td><td></td><td class="s">six as promised (microseconds).  Not to worry, the microseconds are</td></tr>
<tr><td class="h"><a name="246"></a>246</td><td></td><td></td><td></td><td></td><td class="s">there (assuming your platform supports such granularity in the first</td></tr>
<tr><td class="h"><a name="247"></a>247</td><td></td><td></td><td></td><td></td><td class="s">place).  What is going on is that the default floating point format of</td></tr>
<tr><td class="h"><a name="248"></a>248</td><td></td><td></td><td></td><td></td><td class="s">Perl only outputs 15 digits.  In this case that means ten digits</td></tr>
<tr><td class="h"><a name="249"></a>249</td><td></td><td></td><td></td><td></td><td class="s">before the decimal separator and five after.  To see the microseconds</td></tr>
<tr><td class="h"><a name="250"></a>250</td><td></td><td></td><td></td><td></td><td class="s">you can use either C&lt;printf&gt;/C&lt;sprintf&gt; with C&lt;&quot;%.6f&quot;&gt;, or the</td></tr>
<tr><td class="h"><a name="251"></a>251</td><td></td><td></td><td></td><td></td><td class="s">C&lt;gettimeofday()&gt; function in list context, which will give you the</td></tr>
<tr><td class="h"><a name="252"></a>252</td><td></td><td></td><td></td><td></td><td class="s">seconds and microseconds as two separate values.</td></tr>
<tr><td class="h"><a name="253"></a>253</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="254"></a>254</td><td></td><td></td><td></td><td></td><td class="s">=item sleep ( $floating_seconds )</td></tr>
<tr><td class="h"><a name="255"></a>255</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="256"></a>256</td><td></td><td></td><td></td><td></td><td class="s">Sleeps for the specified amount of seconds.  Returns the number of</td></tr>
<tr><td class="h"><a name="257"></a>257</td><td></td><td></td><td></td><td></td><td class="s">seconds actually slept (a floating point value).  This function can</td></tr>
<tr><td class="h"><a name="258"></a>258</td><td></td><td></td><td></td><td></td><td class="s">be imported, resulting in a nice drop-in replacement for the C&lt;sleep&gt;</td></tr>
<tr><td class="h"><a name="259"></a>259</td><td></td><td></td><td></td><td></td><td class="s">provided with perl, see the L&lt;/EXAMPLES&gt; below.</td></tr>
<tr><td class="h"><a name="260"></a>260</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="261"></a>261</td><td></td><td></td><td></td><td></td><td class="s">Note that the interaction between alarms and sleeps is unspecified.</td></tr>
<tr><td class="h"><a name="262"></a>262</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="263"></a>263</td><td></td><td></td><td></td><td></td><td class="s">=item alarm ( $floating_seconds [, $interval_floating_seconds ] )</td></tr>
<tr><td class="h"><a name="264"></a>264</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="265"></a>265</td><td></td><td></td><td></td><td></td><td class="s">The C&lt;SIGALRM&gt; signal is sent after the specified number of seconds.</td></tr>
<tr><td class="h"><a name="266"></a>266</td><td></td><td></td><td></td><td></td><td class="s">Implemented using C&lt;setitimer()&gt; if available, C&lt;ualarm()&gt; if not.</td></tr>
<tr><td class="h"><a name="267"></a>267</td><td></td><td></td><td></td><td></td><td class="s">The C&lt;$interval_floating_seconds&gt; argument is optional and will be</td></tr>
<tr><td class="h"><a name="268"></a>268</td><td></td><td></td><td></td><td></td><td class="s">zero if unspecified, resulting in C&lt;alarm()&gt;-like behaviour.  This</td></tr>
<tr><td class="h"><a name="269"></a>269</td><td></td><td></td><td></td><td></td><td class="s">function can be imported, resulting in a nice drop-in replacement for</td></tr>
<tr><td class="h"><a name="270"></a>270</td><td></td><td></td><td></td><td></td><td class="s">the C&lt;alarm&gt; provided with perl, see the L&lt;/EXAMPLES&gt; below.</td></tr>
<tr><td class="h"><a name="271"></a>271</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="272"></a>272</td><td></td><td></td><td></td><td></td><td class="s">Returns the remaining time in the alarm in seconds, or C&lt;undef&gt;</td></tr>
<tr><td class="h"><a name="273"></a>273</td><td></td><td></td><td></td><td></td><td class="s">if an error occurred.</td></tr>
<tr><td class="h"><a name="274"></a>274</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="275"></a>275</td><td></td><td></td><td></td><td></td><td class="s">B&lt;NOTE 1&gt;: With some combinations of operating systems and Perl</td></tr>
<tr><td class="h"><a name="276"></a>276</td><td></td><td></td><td></td><td></td><td class="s">releases C&lt;SIGALRM&gt; restarts C&lt;select()&gt;, instead of interrupting it.</td></tr>
<tr><td class="h"><a name="277"></a>277</td><td></td><td></td><td></td><td></td><td class="s">This means that an C&lt;alarm()&gt; followed by a C&lt;select()&gt; may together</td></tr>
<tr><td class="h"><a name="278"></a>278</td><td></td><td></td><td></td><td></td><td class="s">take the sum of the times specified for the the C&lt;alarm()&gt; and the</td></tr>
<tr><td class="h"><a name="279"></a>279</td><td></td><td></td><td></td><td></td><td class="s">C&lt;select()&gt;, not just the time of the C&lt;alarm()&gt;.</td></tr>
<tr><td class="h"><a name="280"></a>280</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="281"></a>281</td><td></td><td></td><td></td><td></td><td class="s">Note that the interaction between alarms and sleeps is unspecified.</td></tr>
<tr><td class="h"><a name="282"></a>282</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="283"></a>283</td><td></td><td></td><td></td><td></td><td class="s">=item setitimer ( $which, $floating_seconds [, $interval_floating_seconds ] )</td></tr>
<tr><td class="h"><a name="284"></a>284</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="285"></a>285</td><td></td><td></td><td></td><td></td><td class="s">Start up an interval timer: after a certain time, a signal ($which) arrives,</td></tr>
<tr><td class="h"><a name="286"></a>286</td><td></td><td></td><td></td><td></td><td class="s">and more signals may keep arriving at certain intervals.  To disable</td></tr>
<tr><td class="h"><a name="287"></a>287</td><td></td><td></td><td></td><td></td><td class="s">an &quot;itimer&quot;, use C&lt;$floating_seconds&gt; of zero.  If the</td></tr>
<tr><td class="h"><a name="288"></a>288</td><td></td><td></td><td></td><td></td><td class="s">C&lt;$interval_floating_seconds&gt; is set to zero (or unspecified), the</td></tr>
<tr><td class="h"><a name="289"></a>289</td><td></td><td></td><td></td><td></td><td class="s">timer is disabled B&lt;after&gt; the next delivered signal.</td></tr>
<tr><td class="h"><a name="290"></a>290</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="291"></a>291</td><td></td><td></td><td></td><td></td><td class="s">Use of interval timers may interfere with C&lt;alarm()&gt;, C&lt;sleep()&gt;,</td></tr>
<tr><td class="h"><a name="292"></a>292</td><td></td><td></td><td></td><td></td><td class="s">and C&lt;usleep()&gt;.  In standard-speak the &quot;interaction is unspecified&quot;,</td></tr>
<tr><td class="h"><a name="293"></a>293</td><td></td><td></td><td></td><td></td><td class="s">which means that I&lt;anything&gt; may happen: it may work, it may not.</td></tr>
<tr><td class="h"><a name="294"></a>294</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="295"></a>295</td><td></td><td></td><td></td><td></td><td class="s">In scalar context, the remaining time in the timer is returned.</td></tr>
<tr><td class="h"><a name="296"></a>296</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="297"></a>297</td><td></td><td></td><td></td><td></td><td class="s">In list context, both the remaining time and the interval are returned.</td></tr>
<tr><td class="h"><a name="298"></a>298</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="299"></a>299</td><td></td><td></td><td></td><td></td><td class="s">There are usually three or four interval timers (signals) available: the</td></tr>
<tr><td class="h"><a name="300"></a>300</td><td></td><td></td><td></td><td></td><td class="s">C&lt;$which&gt; can be C&lt;ITIMER_REAL&gt;, C&lt;ITIMER_VIRTUAL&gt;, C&lt;ITIMER_PROF&gt;, or</td></tr>
<tr><td class="h"><a name="301"></a>301</td><td></td><td></td><td></td><td></td><td class="s">C&lt;ITIMER_REALPROF&gt;.  Note that which ones are available depends: true</td></tr>
<tr><td class="h"><a name="302"></a>302</td><td></td><td></td><td></td><td></td><td class="s">UNIX platforms usually have the first three, but only Solaris seems to</td></tr>
<tr><td class="h"><a name="303"></a>303</td><td></td><td></td><td></td><td></td><td class="s">have C&lt;ITIMER_REALPROF&gt; (which is used to profile multithreaded programs).</td></tr>
<tr><td class="h"><a name="304"></a>304</td><td></td><td></td><td></td><td></td><td class="s">Win32 unfortunately does not haveinterval timers.</td></tr>
<tr><td class="h"><a name="305"></a>305</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="306"></a>306</td><td></td><td></td><td></td><td></td><td class="s">C&lt;ITIMER_REAL&gt; results in C&lt;alarm()&gt;-like behaviour.  Time is counted in</td></tr>
<tr><td class="h"><a name="307"></a>307</td><td></td><td></td><td></td><td></td><td class="s">I&lt;real time&gt;; that is, wallclock time.  C&lt;SIGALRM&gt; is delivered when</td></tr>
<tr><td class="h"><a name="308"></a>308</td><td></td><td></td><td></td><td></td><td class="s">the timer expires.</td></tr>
<tr><td class="h"><a name="309"></a>309</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="310"></a>310</td><td></td><td></td><td></td><td></td><td class="s">C&lt;ITIMER_VIRTUAL&gt; counts time in (process) I&lt;virtual time&gt;; that is,</td></tr>
<tr><td class="h"><a name="311"></a>311</td><td></td><td></td><td></td><td></td><td class="s">only when the process is running.  In multiprocessor/user/CPU systems</td></tr>
<tr><td class="h"><a name="312"></a>312</td><td></td><td></td><td></td><td></td><td class="s">this may be more or less than real or wallclock time.  (This time is</td></tr>
<tr><td class="h"><a name="313"></a>313</td><td></td><td></td><td></td><td></td><td class="s">also known as the I&lt;user time&gt;.)  C&lt;SIGVTALRM&gt; is delivered when the</td></tr>
<tr><td class="h"><a name="314"></a>314</td><td></td><td></td><td></td><td></td><td class="s">timer expires.</td></tr>
<tr><td class="h"><a name="315"></a>315</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="316"></a>316</td><td></td><td></td><td></td><td></td><td class="s">C&lt;ITIMER_PROF&gt; counts time when either the process virtual time or when</td></tr>
<tr><td class="h"><a name="317"></a>317</td><td></td><td></td><td></td><td></td><td class="s">the operating system is running on behalf of the process (such as I/O).</td></tr>
<tr><td class="h"><a name="318"></a>318</td><td></td><td></td><td></td><td></td><td class="s">(This time is also known as the I&lt;system time&gt;.)  (The sum of user</td></tr>
<tr><td class="h"><a name="319"></a>319</td><td></td><td></td><td></td><td></td><td class="s">time and system time is known as the I&lt;CPU time&gt;.)  C&lt;SIGPROF&gt; is</td></tr>
<tr><td class="h"><a name="320"></a>320</td><td></td><td></td><td></td><td></td><td class="s">delivered when the timer expires.  C&lt;SIGPROF&gt; can interrupt system calls.</td></tr>
<tr><td class="h"><a name="321"></a>321</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="322"></a>322</td><td></td><td></td><td></td><td></td><td class="s">The semantics of interval timers for multithreaded programs are</td></tr>
<tr><td class="h"><a name="323"></a>323</td><td></td><td></td><td></td><td></td><td class="s">system-specific, and some systems may support additional interval</td></tr>
<tr><td class="h"><a name="324"></a>324</td><td></td><td></td><td></td><td></td><td class="s">timers.  For example, it is unspecified which thread gets the signals.</td></tr>
<tr><td class="h"><a name="325"></a>325</td><td></td><td></td><td></td><td></td><td class="s">See your C&lt;setitimer()&gt; documentation.</td></tr>
<tr><td class="h"><a name="326"></a>326</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="327"></a>327</td><td></td><td></td><td></td><td></td><td class="s">=item getitimer ( $which )</td></tr>
<tr><td class="h"><a name="328"></a>328</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="329"></a>329</td><td></td><td></td><td></td><td></td><td class="s">Return the remaining time in the interval timer specified by C&lt;$which&gt;.</td></tr>
<tr><td class="h"><a name="330"></a>330</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="331"></a>331</td><td></td><td></td><td></td><td></td><td class="s">In scalar context, the remaining time is returned.</td></tr>
<tr><td class="h"><a name="332"></a>332</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="333"></a>333</td><td></td><td></td><td></td><td></td><td class="s">In list context, both the remaining time and the interval are returned.</td></tr>
<tr><td class="h"><a name="334"></a>334</td><td></td><td></td><td></td><td></td><td class="s">The interval is always what you put in using C&lt;setitimer()&gt;.</td></tr>
<tr><td class="h"><a name="335"></a>335</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="336"></a>336</td><td></td><td></td><td></td><td></td><td class="s">=item clock_gettime ( $which )</td></tr>
<tr><td class="h"><a name="337"></a>337</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="338"></a>338</td><td></td><td></td><td></td><td></td><td class="s">Return as seconds the current value of the POSIX high resolution timer</td></tr>
<tr><td class="h"><a name="339"></a>339</td><td></td><td></td><td></td><td></td><td class="s">specified by C&lt;$which&gt;.  All implementations that support POSIX high</td></tr>
<tr><td class="h"><a name="340"></a>340</td><td></td><td></td><td></td><td></td><td class="s">resolution timers are supposed to support at least the C&lt;$which&gt; value</td></tr>
<tr><td class="h"><a name="341"></a>341</td><td></td><td></td><td></td><td></td><td class="s">of C&lt;CLOCK_REALTIME&gt;, which is supposed to return results close to the</td></tr>
<tr><td class="h"><a name="342"></a>342</td><td></td><td></td><td></td><td></td><td class="s">results of C&lt;gettimeofday&gt;, or the number of seconds since 00:00:00:00</td></tr>
<tr><td class="h"><a name="343"></a>343</td><td></td><td></td><td></td><td></td><td class="s">January 1, 1970 Greenwich Mean Time (GMT).  Do not assume that</td></tr>
<tr><td class="h"><a name="344"></a>344</td><td></td><td></td><td></td><td></td><td class="s">CLOCK_REALTIME is zero, it might be one, or something else.</td></tr>
<tr><td class="h"><a name="345"></a>345</td><td></td><td></td><td></td><td></td><td class="s">Another potentially useful (but not available everywhere) value is</td></tr>
<tr><td class="h"><a name="346"></a>346</td><td></td><td></td><td></td><td></td><td class="s">C&lt;CLOCK_MONOTONIC&gt;, which guarantees a monotonically increasing time</td></tr>
<tr><td class="h"><a name="347"></a>347</td><td></td><td></td><td></td><td></td><td class="s">value (unlike time() or gettimeofday(), which can be adjusted).</td></tr>
<tr><td class="h"><a name="348"></a>348</td><td></td><td></td><td></td><td></td><td class="s">See your system documentation for other possibly supported values.</td></tr>
<tr><td class="h"><a name="349"></a>349</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="350"></a>350</td><td></td><td></td><td></td><td></td><td class="s">=item clock_getres ( $which )</td></tr>
<tr><td class="h"><a name="351"></a>351</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="352"></a>352</td><td></td><td></td><td></td><td></td><td class="s">Return as seconds the resolution of the POSIX high resolution timer</td></tr>
<tr><td class="h"><a name="353"></a>353</td><td></td><td></td><td></td><td></td><td class="s">specified by C&lt;$which&gt;.  All implementations that support POSIX high</td></tr>
<tr><td class="h"><a name="354"></a>354</td><td></td><td></td><td></td><td></td><td class="s">resolution timers are supposed to support at least the C&lt;$which&gt; value</td></tr>
<tr><td class="h"><a name="355"></a>355</td><td></td><td></td><td></td><td></td><td class="s">of C&lt;CLOCK_REALTIME&gt;, see L&lt;/clock_gettime&gt;.</td></tr>
<tr><td class="h"><a name="356"></a>356</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="357"></a>357</td><td></td><td></td><td></td><td></td><td class="s">=item clock_nanosleep ( $which, $nanoseconds, $flags = 0)</td></tr>
<tr><td class="h"><a name="358"></a>358</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="359"></a>359</td><td></td><td></td><td></td><td></td><td class="s">Sleeps for the number of nanoseconds (1e9ths of a second) specified.</td></tr>
<tr><td class="h"><a name="360"></a>360</td><td></td><td></td><td></td><td></td><td class="s">Returns the number of nanoseconds actually slept.  The $which is the</td></tr>
<tr><td class="h"><a name="361"></a>361</td><td></td><td></td><td></td><td></td><td class="s">&quot;clock id&quot;, as with clock_gettime() and clock_getres().  The flags</td></tr>
<tr><td class="h"><a name="362"></a>362</td><td></td><td></td><td></td><td></td><td class="s">default to zero but C&lt;TIMER_ABSTIME&gt; can specified (must be exported</td></tr>
<tr><td class="h"><a name="363"></a>363</td><td></td><td></td><td></td><td></td><td class="s">explicitly) which means that C&lt;$nanoseconds&gt; is not a time interval</td></tr>
<tr><td class="h"><a name="364"></a>364</td><td></td><td></td><td></td><td></td><td class="s">(as is the default) but instead an absolute time.  Can sleep for more</td></tr>
<tr><td class="h"><a name="365"></a>365</td><td></td><td></td><td></td><td></td><td class="s">than one second.  Can also sleep for zero seconds, which often works</td></tr>
<tr><td class="h"><a name="366"></a>366</td><td></td><td></td><td></td><td></td><td class="s">like a I&lt;thread yield&gt;.  See also C&lt;Time::HiRes::sleep()&gt;,</td></tr>
<tr><td class="h"><a name="367"></a>367</td><td></td><td></td><td></td><td></td><td class="s">C&lt;Time::HiRes::usleep()&gt;, and C&lt;Time::HiRes::nanosleep()&gt;.</td></tr>
<tr><td class="h"><a name="368"></a>368</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="369"></a>369</td><td></td><td></td><td></td><td></td><td class="s">Do not expect clock_nanosleep() to be exact down to one nanosecond.</td></tr>
<tr><td class="h"><a name="370"></a>370</td><td></td><td></td><td></td><td></td><td class="s">Getting even accuracy of one thousand nanoseconds is good.</td></tr>
<tr><td class="h"><a name="371"></a>371</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="372"></a>372</td><td></td><td></td><td></td><td></td><td class="s">=item clock()</td></tr>
<tr><td class="h"><a name="373"></a>373</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="374"></a>374</td><td></td><td></td><td></td><td></td><td class="s">Return as seconds the I&lt;process time&gt; (user + system time) spent by</td></tr>
<tr><td class="h"><a name="375"></a>375</td><td></td><td></td><td></td><td></td><td class="s">the process since the first call to clock() (the definition is B&lt;not&gt;</td></tr>
<tr><td class="h"><a name="376"></a>376</td><td></td><td></td><td></td><td></td><td class="s">&quot;since the start of the process&quot;, though if you are lucky these times</td></tr>
<tr><td class="h"><a name="377"></a>377</td><td></td><td></td><td></td><td></td><td class="s">may be quite close to each other, depending on the system).  What this</td></tr>
<tr><td class="h"><a name="378"></a>378</td><td></td><td></td><td></td><td></td><td class="s">means is that you probably need to store the result of your first call</td></tr>
<tr><td class="h"><a name="379"></a>379</td><td></td><td></td><td></td><td></td><td class="s">to clock(), and subtract that value from the following results of clock().</td></tr>
<tr><td class="h"><a name="380"></a>380</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="381"></a>381</td><td></td><td></td><td></td><td></td><td class="s">The time returned also includes the process times of the terminated</td></tr>
<tr><td class="h"><a name="382"></a>382</td><td></td><td></td><td></td><td></td><td class="s">child processes for which wait() has been executed.  This value is</td></tr>
<tr><td class="h"><a name="383"></a>383</td><td></td><td></td><td></td><td></td><td class="s">somewhat like the second value returned by the times() of core Perl,</td></tr>
<tr><td class="h"><a name="384"></a>384</td><td></td><td></td><td></td><td></td><td class="s">but not necessarily identical.  Note that due to backward</td></tr>
<tr><td class="h"><a name="385"></a>385</td><td></td><td></td><td></td><td></td><td class="s">compatibility limitations the returned value may wrap around at about</td></tr>
<tr><td class="h"><a name="386"></a>386</td><td></td><td></td><td></td><td></td><td class="s">2147 seconds or at about 36 minutes.</td></tr>
<tr><td class="h"><a name="387"></a>387</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="388"></a>388</td><td></td><td></td><td></td><td></td><td class="s">=item stat</td></tr>
<tr><td class="h"><a name="389"></a>389</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="390"></a>390</td><td></td><td></td><td></td><td></td><td class="s">=item stat FH</td></tr>
<tr><td class="h"><a name="391"></a>391</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="392"></a>392</td><td></td><td></td><td></td><td></td><td class="s">=item stat EXPR</td></tr>
<tr><td class="h"><a name="393"></a>393</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="394"></a>394</td><td></td><td></td><td></td><td></td><td class="s">As L&lt;perlfunc/stat&gt; but with the access/modify/change file timestamps</td></tr>
<tr><td class="h"><a name="395"></a>395</td><td></td><td></td><td></td><td></td><td class="s">in subsecond resolution, if the operating system and the filesystem</td></tr>
<tr><td class="h"><a name="396"></a>396</td><td></td><td></td><td></td><td></td><td class="s">both support such timestamps.  To override the standard stat():</td></tr>
<tr><td class="h"><a name="397"></a>397</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="398"></a>398</td><td></td><td></td><td></td><td></td><td class="s">    use Time::HiRes qw(stat);</td></tr>
<tr><td class="h"><a name="399"></a>399</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="400"></a>400</td><td></td><td></td><td></td><td></td><td class="s">Test for the value of &amp;Time::HiRes::d_hires_stat to find out whether</td></tr>
<tr><td class="h"><a name="401"></a>401</td><td></td><td></td><td></td><td></td><td class="s">the operating system supports subsecond file timestamps: a value</td></tr>
<tr><td class="h"><a name="402"></a>402</td><td></td><td></td><td></td><td></td><td class="s">larger than zero means yes. There are unfortunately no easy</td></tr>
<tr><td class="h"><a name="403"></a>403</td><td></td><td></td><td></td><td></td><td class="s">ways to find out whether the filesystem supports such timestamps.</td></tr>
<tr><td class="h"><a name="404"></a>404</td><td></td><td></td><td></td><td></td><td class="s">UNIX filesystems often do; NTFS does; FAT doesn't (FAT timestamp</td></tr>
<tr><td class="h"><a name="405"></a>405</td><td></td><td></td><td></td><td></td><td class="s">granularity is B&lt;two&gt; seconds).</td></tr>
<tr><td class="h"><a name="406"></a>406</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="407"></a>407</td><td></td><td></td><td></td><td></td><td class="s">A zero return value of &amp;Time::HiRes::d_hires_stat means that</td></tr>
<tr><td class="h"><a name="408"></a>408</td><td></td><td></td><td></td><td></td><td class="s">Time::HiRes::stat is a no-op passthrough for CORE::stat(),</td></tr>
<tr><td class="h"><a name="409"></a>409</td><td></td><td></td><td></td><td></td><td class="s">and therefore the timestamps will stay integers.  The same</td></tr>
<tr><td class="h"><a name="410"></a>410</td><td></td><td></td><td></td><td></td><td class="s">thing will happen if the filesystem does not do subsecond timestamps,</td></tr>
<tr><td class="h"><a name="411"></a>411</td><td></td><td></td><td></td><td></td><td class="s">even if the &amp;Time::HiRes::d_hires_stat is non-zero.</td></tr>
<tr><td class="h"><a name="412"></a>412</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="413"></a>413</td><td></td><td></td><td></td><td></td><td class="s">In any case do not expect nanosecond resolution, or even a microsecond</td></tr>
<tr><td class="h"><a name="414"></a>414</td><td></td><td></td><td></td><td></td><td class="s">resolution.  Also note that the modify/access timestamps might have</td></tr>
<tr><td class="h"><a name="415"></a>415</td><td></td><td></td><td></td><td></td><td class="s">different resolutions, and that they need not be synchronized, e.g.</td></tr>
<tr><td class="h"><a name="416"></a>416</td><td></td><td></td><td></td><td></td><td class="s">if the operations are</td></tr>
<tr><td class="h"><a name="417"></a>417</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="418"></a>418</td><td></td><td></td><td></td><td></td><td class="s">    write</td></tr>
<tr><td class="h"><a name="419"></a>419</td><td></td><td></td><td></td><td></td><td class="s">    stat # t1</td></tr>
<tr><td class="h"><a name="420"></a>420</td><td></td><td></td><td></td><td></td><td class="s">    read</td></tr>
<tr><td class="h"><a name="421"></a>421</td><td></td><td></td><td></td><td></td><td class="s">    stat # t2</td></tr>
<tr><td class="h"><a name="422"></a>422</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="423"></a>423</td><td></td><td></td><td></td><td></td><td class="s">the access time stamp from t2 need not be greater-than the modify</td></tr>
<tr><td class="h"><a name="424"></a>424</td><td></td><td></td><td></td><td></td><td class="s">time stamp from t1: it may be equal or I&lt;less&gt;.</td></tr>
<tr><td class="h"><a name="425"></a>425</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="426"></a>426</td><td></td><td></td><td></td><td></td><td class="s">=back</td></tr>
<tr><td class="h"><a name="427"></a>427</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="428"></a>428</td><td></td><td></td><td></td><td></td><td class="s">=head1 EXAMPLES</td></tr>
<tr><td class="h"><a name="429"></a>429</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="430"></a>430</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw(usleep ualarm gettimeofday tv_interval);</td></tr>
<tr><td class="h"><a name="431"></a>431</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="432"></a>432</td><td></td><td></td><td></td><td></td><td class="s">  $microseconds = 750_000;</td></tr>
<tr><td class="h"><a name="433"></a>433</td><td></td><td></td><td></td><td></td><td class="s">  usleep($microseconds);</td></tr>
<tr><td class="h"><a name="434"></a>434</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="435"></a>435</td><td></td><td></td><td></td><td></td><td class="s">  # signal alarm in 2.5s &amp; every .1s thereafter</td></tr>
<tr><td class="h"><a name="436"></a>436</td><td></td><td></td><td></td><td></td><td class="s">  ualarm(2_500_000, 100_000);</td></tr>
<tr><td class="h"><a name="437"></a>437</td><td></td><td></td><td></td><td></td><td class="s">  # cancel that ualarm</td></tr>
<tr><td class="h"><a name="438"></a>438</td><td></td><td></td><td></td><td></td><td class="s">  ualarm(0);</td></tr>
<tr><td class="h"><a name="439"></a>439</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="440"></a>440</td><td></td><td></td><td></td><td></td><td class="s">  # get seconds and microseconds since the epoch</td></tr>
<tr><td class="h"><a name="441"></a>441</td><td></td><td></td><td></td><td></td><td class="s">  ($s, $usec) = gettimeofday();</td></tr>
<tr><td class="h"><a name="442"></a>442</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="443"></a>443</td><td></td><td></td><td></td><td></td><td class="s">  # measure elapsed time </td></tr>
<tr><td class="h"><a name="444"></a>444</td><td></td><td></td><td></td><td></td><td class="s">  # (could also do by subtracting 2 gettimeofday return values)</td></tr>
<tr><td class="h"><a name="445"></a>445</td><td></td><td></td><td></td><td></td><td class="s">  $t0 = [gettimeofday];</td></tr>
<tr><td class="h"><a name="446"></a>446</td><td></td><td></td><td></td><td></td><td class="s">  # do bunch of stuff here</td></tr>
<tr><td class="h"><a name="447"></a>447</td><td></td><td></td><td></td><td></td><td class="s">  $t1 = [gettimeofday];</td></tr>
<tr><td class="h"><a name="448"></a>448</td><td></td><td></td><td></td><td></td><td class="s">  # do more stuff here</td></tr>
<tr><td class="h"><a name="449"></a>449</td><td></td><td></td><td></td><td></td><td class="s">  $t0_t1 = tv_interval $t0, $t1;</td></tr>
<tr><td class="h"><a name="450"></a>450</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="451"></a>451</td><td></td><td></td><td></td><td></td><td class="s">  $elapsed = tv_interval ($t0, [gettimeofday]);</td></tr>
<tr><td class="h"><a name="452"></a>452</td><td></td><td></td><td></td><td></td><td class="s">  $elapsed = tv_interval ($t0);        # equivalent code</td></tr>
<tr><td class="h"><a name="453"></a>453</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="454"></a>454</td><td></td><td></td><td></td><td></td><td class="s">  #</td></tr>
<tr><td class="h"><a name="455"></a>455</td><td></td><td></td><td></td><td></td><td class="s">  # replacements for time, alarm and sleep that know about</td></tr>
<tr><td class="h"><a name="456"></a>456</td><td></td><td></td><td></td><td></td><td class="s">  # floating seconds</td></tr>
<tr><td class="h"><a name="457"></a>457</td><td></td><td></td><td></td><td></td><td class="s">  #</td></tr>
<tr><td class="h"><a name="458"></a>458</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes;</td></tr>
<tr><td class="h"><a name="459"></a>459</td><td></td><td></td><td></td><td></td><td class="s">  $now_fractions = Time::HiRes::time;</td></tr>
<tr><td class="h"><a name="460"></a>460</td><td></td><td></td><td></td><td></td><td class="s">  Time::HiRes::sleep (2.5);</td></tr>
<tr><td class="h"><a name="461"></a>461</td><td></td><td></td><td></td><td></td><td class="s">  Time::HiRes::alarm (10.6666666);</td></tr>
<tr><td class="h"><a name="462"></a>462</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="463"></a>463</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw ( time alarm sleep );</td></tr>
<tr><td class="h"><a name="464"></a>464</td><td></td><td></td><td></td><td></td><td class="s">  $now_fractions = time;</td></tr>
<tr><td class="h"><a name="465"></a>465</td><td></td><td></td><td></td><td></td><td class="s">  sleep (2.5);</td></tr>
<tr><td class="h"><a name="466"></a>466</td><td></td><td></td><td></td><td></td><td class="s">  alarm (10.6666666);</td></tr>
<tr><td class="h"><a name="467"></a>467</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="468"></a>468</td><td></td><td></td><td></td><td></td><td class="s">  # Arm an interval timer to go off first at 10 seconds and</td></tr>
<tr><td class="h"><a name="469"></a>469</td><td></td><td></td><td></td><td></td><td class="s">  # after that every 2.5 seconds, in process virtual time</td></tr>
<tr><td class="h"><a name="470"></a>470</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="471"></a>471</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw ( setitimer ITIMER_VIRTUAL time );</td></tr>
<tr><td class="h"><a name="472"></a>472</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="473"></a>473</td><td></td><td></td><td></td><td></td><td class="s">  $SIG{VTALRM} = sub { print time, &quot;\n&quot; };</td></tr>
<tr><td class="h"><a name="474"></a>474</td><td></td><td></td><td></td><td></td><td class="s">  setitimer(ITIMER_VIRTUAL, 10, 2.5);</td></tr>
<tr><td class="h"><a name="475"></a>475</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="476"></a>476</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw( clock_gettime clock_getres CLOCK_REALTIME );</td></tr>
<tr><td class="h"><a name="477"></a>477</td><td></td><td></td><td></td><td></td><td class="s">  # Read the POSIX high resolution timer.</td></tr>
<tr><td class="h"><a name="478"></a>478</td><td></td><td></td><td></td><td></td><td class="s">  my $high = clock_getres(CLOCK_REALTIME);</td></tr>
<tr><td class="h"><a name="479"></a>479</td><td></td><td></td><td></td><td></td><td class="s">  # But how accurate we can be, really?</td></tr>
<tr><td class="h"><a name="480"></a>480</td><td></td><td></td><td></td><td></td><td class="s">  my $reso = clock_getres(CLOCK_REALTIME);</td></tr>
<tr><td class="h"><a name="481"></a>481</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="482"></a>482</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw( clock_nanosleep TIMER_ABSTIME );</td></tr>
<tr><td class="h"><a name="483"></a>483</td><td></td><td></td><td></td><td></td><td class="s">  clock_nanosleep(CLOCK_REALTIME, 1e6);</td></tr>
<tr><td class="h"><a name="484"></a>484</td><td></td><td></td><td></td><td></td><td class="s">  clock_nanosleep(CLOCK_REALTIME, 2e9, TIMER_ABSTIME);</td></tr>
<tr><td class="h"><a name="485"></a>485</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="486"></a>486</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw( clock );</td></tr>
<tr><td class="h"><a name="487"></a>487</td><td></td><td></td><td></td><td></td><td class="s">  my $clock0 = clock();</td></tr>
<tr><td class="h"><a name="488"></a>488</td><td></td><td></td><td></td><td></td><td class="s">  ... # Do something.</td></tr>
<tr><td class="h"><a name="489"></a>489</td><td></td><td></td><td></td><td></td><td class="s">  my $clock1 = clock();</td></tr>
<tr><td class="h"><a name="490"></a>490</td><td></td><td></td><td></td><td></td><td class="s">  my $clockd = $clock1 - $clock0;</td></tr>
<tr><td class="h"><a name="491"></a>491</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="492"></a>492</td><td></td><td></td><td></td><td></td><td class="s">  use Time::HiRes qw( stat );</td></tr>
<tr><td class="h"><a name="493"></a>493</td><td></td><td></td><td></td><td></td><td class="s">  my ($atime, $mtime, $ctime) = (stat(&quot;istics&quot;))[8, 9, 10];</td></tr>
<tr><td class="h"><a name="494"></a>494</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="495"></a>495</td><td></td><td></td><td></td><td></td><td class="s">=head1 C API</td></tr>
<tr><td class="h"><a name="496"></a>496</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="497"></a>497</td><td></td><td></td><td></td><td></td><td class="s">In addition to the perl API described above, a C API is available for</td></tr>
<tr><td class="h"><a name="498"></a>498</td><td></td><td></td><td></td><td></td><td class="s">extension writers.  The following C functions are available in the</td></tr>
<tr><td class="h"><a name="499"></a>499</td><td></td><td></td><td></td><td></td><td class="s">modglobal hash:</td></tr>
<tr><td class="h"><a name="500"></a>500</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="501"></a>501</td><td></td><td></td><td></td><td></td><td class="s">  name             C prototype</td></tr>
<tr><td class="h"><a name="502"></a>502</td><td></td><td></td><td></td><td></td><td class="s">  ---------------  ----------------------</td></tr>
<tr><td class="h"><a name="503"></a>503</td><td></td><td></td><td></td><td></td><td class="s">  Time::NVtime     double (*)()</td></tr>
<tr><td class="h"><a name="504"></a>504</td><td></td><td></td><td></td><td></td><td class="s">  Time::U2time     void (*)(pTHX_ UV ret[2])</td></tr>
<tr><td class="h"><a name="505"></a>505</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="506"></a>506</td><td></td><td></td><td></td><td></td><td class="s">Both functions return equivalent information (like C&lt;gettimeofday&gt;)</td></tr>
<tr><td class="h"><a name="507"></a>507</td><td></td><td></td><td></td><td></td><td class="s">but with different representations.  The names C&lt;NVtime&gt; and C&lt;U2time&gt;</td></tr>
<tr><td class="h"><a name="508"></a>508</td><td></td><td></td><td></td><td></td><td class="s">were selected mainly because they are operating system independent.</td></tr>
<tr><td class="h"><a name="509"></a>509</td><td></td><td></td><td></td><td></td><td class="s">(C&lt;gettimeofday&gt; is Unix-centric, though some platforms like Win32 and</td></tr>
<tr><td class="h"><a name="510"></a>510</td><td></td><td></td><td></td><td></td><td class="s">VMS have emulations for it.)</td></tr>
<tr><td class="h"><a name="511"></a>511</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="512"></a>512</td><td></td><td></td><td></td><td></td><td class="s">Here is an example of using C&lt;NVtime&gt; from C:</td></tr>
<tr><td class="h"><a name="513"></a>513</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="514"></a>514</td><td></td><td></td><td></td><td></td><td class="s">  double (*myNVtime)(); /* Returns -1 on failure. */</td></tr>
<tr><td class="h"><a name="515"></a>515</td><td></td><td></td><td></td><td></td><td class="s">  SV **svp = hv_fetch(PL_modglobal, &quot;Time::NVtime&quot;, 12, 0);</td></tr>
<tr><td class="h"><a name="516"></a>516</td><td></td><td></td><td></td><td></td><td class="s">  if (!svp)         croak(&quot;Time::HiRes is required&quot;);</td></tr>
<tr><td class="h"><a name="517"></a>517</td><td></td><td></td><td></td><td></td><td class="s">  if (!SvIOK(*svp)) croak(&quot;Time::NVtime isn't a function pointer&quot;);</td></tr>
<tr><td class="h"><a name="518"></a>518</td><td></td><td></td><td></td><td></td><td class="s">  myNVtime = INT2PTR(double(*)(), SvIV(*svp));</td></tr>
<tr><td class="h"><a name="519"></a>519</td><td></td><td></td><td></td><td></td><td class="s">  printf(&quot;The current time is: %f\n&quot;, (*myNVtime)());</td></tr>
<tr><td class="h"><a name="520"></a>520</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="521"></a>521</td><td></td><td></td><td></td><td></td><td class="s">=head1 DIAGNOSTICS</td></tr>
<tr><td class="h"><a name="522"></a>522</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="523"></a>523</td><td></td><td></td><td></td><td></td><td class="s">=head2 useconds or interval more than ...</td></tr>
<tr><td class="h"><a name="524"></a>524</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="525"></a>525</td><td></td><td></td><td></td><td></td><td class="s">In ualarm() you tried to use number of microseconds or interval (also</td></tr>
<tr><td class="h"><a name="526"></a>526</td><td></td><td></td><td></td><td></td><td class="s">in microseconds) more than 1_000_000 and setitimer() is not available</td></tr>
<tr><td class="h"><a name="527"></a>527</td><td></td><td></td><td></td><td></td><td class="s">in your system to emulate that case.</td></tr>
<tr><td class="h"><a name="528"></a>528</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="529"></a>529</td><td></td><td></td><td></td><td></td><td class="s">=head2 negative time not invented yet</td></tr>
<tr><td class="h"><a name="530"></a>530</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="531"></a>531</td><td></td><td></td><td></td><td></td><td class="s">You tried to use a negative time argument.</td></tr>
<tr><td class="h"><a name="532"></a>532</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="533"></a>533</td><td></td><td></td><td></td><td></td><td class="s">=head2 internal error: useconds &lt; 0 (unsigned ... signed ...)</td></tr>
<tr><td class="h"><a name="534"></a>534</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="535"></a>535</td><td></td><td></td><td></td><td></td><td class="s">Something went horribly wrong-- the number of microseconds that cannot</td></tr>
<tr><td class="h"><a name="536"></a>536</td><td></td><td></td><td></td><td></td><td class="s">become negative just became negative.  Maybe your compiler is broken?</td></tr>
<tr><td class="h"><a name="537"></a>537</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="538"></a>538</td><td></td><td></td><td></td><td></td><td class="s">=head2 useconds or uinterval equal to or more than 1000000</td></tr>
<tr><td class="h"><a name="539"></a>539</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="540"></a>540</td><td></td><td></td><td></td><td></td><td class="s">In some platforms it is not possible to get an alarm with subsecond</td></tr>
<tr><td class="h"><a name="541"></a>541</td><td></td><td></td><td></td><td></td><td class="s">resolution and later than one second.</td></tr>
<tr><td class="h"><a name="542"></a>542</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="543"></a>543</td><td></td><td></td><td></td><td></td><td class="s">=head2 unimplemented in this platform</td></tr>
<tr><td class="h"><a name="544"></a>544</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="545"></a>545</td><td></td><td></td><td></td><td></td><td class="s">Some calls simply aren't available, real or emulated, on every platform.</td></tr>
<tr><td class="h"><a name="546"></a>546</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="547"></a>547</td><td></td><td></td><td></td><td></td><td class="s">=head1 CAVEATS</td></tr>
<tr><td class="h"><a name="548"></a>548</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="549"></a>549</td><td></td><td></td><td></td><td></td><td class="s">Notice that the core C&lt;time()&gt; maybe rounding rather than truncating.</td></tr>
<tr><td class="h"><a name="550"></a>550</td><td></td><td></td><td></td><td></td><td class="s">What this means is that the core C&lt;time()&gt; may be reporting the time</td></tr>
<tr><td class="h"><a name="551"></a>551</td><td></td><td></td><td></td><td></td><td class="s">as one second later than C&lt;gettimeofday()&gt; and C&lt;Time::HiRes::time()&gt;.</td></tr>
<tr><td class="h"><a name="552"></a>552</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="553"></a>553</td><td></td><td></td><td></td><td></td><td class="s">Adjusting the system clock (either manually or by services like ntp)</td></tr>
<tr><td class="h"><a name="554"></a>554</td><td></td><td></td><td></td><td></td><td class="s">may cause problems, especially for long running programs that assume</td></tr>
<tr><td class="h"><a name="555"></a>555</td><td></td><td></td><td></td><td></td><td class="s">a monotonously increasing time (note that all platforms do not adjust</td></tr>
<tr><td class="h"><a name="556"></a>556</td><td></td><td></td><td></td><td></td><td class="s">time as gracefully as UNIX ntp does).  For example in Win32 (and derived</td></tr>
<tr><td class="h"><a name="557"></a>557</td><td></td><td></td><td></td><td></td><td class="s">platforms like Cygwin and MinGW) the Time::HiRes::time() may temporarily</td></tr>
<tr><td class="h"><a name="558"></a>558</td><td></td><td></td><td></td><td></td><td class="s">drift off from the system clock (and the original time())  by up to 0.5</td></tr>
<tr><td class="h"><a name="559"></a>559</td><td></td><td></td><td></td><td></td><td class="s">seconds. Time::HiRes will notice this eventually and recalibrate.</td></tr>
<tr><td class="h"><a name="560"></a>560</td><td></td><td></td><td></td><td></td><td class="s">Note that since Time::HiRes 1.77 the clock_gettime(CLOCK_MONOTONIC)</td></tr>
<tr><td class="h"><a name="561"></a>561</td><td></td><td></td><td></td><td></td><td class="s">might help in this (in case your system supports CLOCK_MONOTONIC).</td></tr>
<tr><td class="h"><a name="562"></a>562</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="563"></a>563</td><td></td><td></td><td></td><td></td><td class="s">Some systems have APIs but not implementations: for example QNX and Haiku</td></tr>
<tr><td class="h"><a name="564"></a>564</td><td></td><td></td><td></td><td></td><td class="s">have the interval timer APIs but not the functionality.</td></tr>
<tr><td class="h"><a name="565"></a>565</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="566"></a>566</td><td></td><td></td><td></td><td></td><td class="s">=head1 SEE ALSO</td></tr>
<tr><td class="h"><a name="567"></a>567</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="568"></a>568</td><td></td><td></td><td></td><td></td><td class="s">Perl modules L&lt;BSD::Resource&gt;, L&lt;Time::TAI64&gt;.</td></tr>
<tr><td class="h"><a name="569"></a>569</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="570"></a>570</td><td></td><td></td><td></td><td></td><td class="s">Your system documentation for C&lt;clock&gt;, C&lt;clock_gettime&gt;,</td></tr>
<tr><td class="h"><a name="571"></a>571</td><td></td><td></td><td></td><td></td><td class="s">C&lt;clock_getres&gt;, C&lt;clock_nanosleep&gt;, C&lt;clock_settime&gt;, C&lt;getitimer&gt;,</td></tr>
<tr><td class="h"><a name="572"></a>572</td><td></td><td></td><td></td><td></td><td class="s">C&lt;gettimeofday&gt;, C&lt;setitimer&gt;, C&lt;sleep&gt;, C&lt;stat&gt;, C&lt;ualarm&gt;.</td></tr>
<tr><td class="h"><a name="573"></a>573</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="574"></a>574</td><td></td><td></td><td></td><td></td><td class="s">=head1 AUTHORS</td></tr>
<tr><td class="h"><a name="575"></a>575</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="576"></a>576</td><td></td><td></td><td></td><td></td><td class="s">D. Wegscheid &lt;wegscd@whirlpool.com&gt;</td></tr>
<tr><td class="h"><a name="577"></a>577</td><td></td><td></td><td></td><td></td><td class="s">R. Schertler &lt;roderick@argon.org&gt;</td></tr>
<tr><td class="h"><a name="578"></a>578</td><td></td><td></td><td></td><td></td><td class="s">J. Hietaniemi &lt;jhi@iki.fi&gt;</td></tr>
<tr><td class="h"><a name="579"></a>579</td><td></td><td></td><td></td><td></td><td class="s">G. Aas &lt;gisle@aas.no&gt;</td></tr>
<tr><td class="h"><a name="580"></a>580</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="581"></a>581</td><td></td><td></td><td></td><td></td><td class="s">=head1 COPYRIGHT AND LICENSE</td></tr>
<tr><td class="h"><a name="582"></a>582</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="583"></a>583</td><td></td><td></td><td></td><td></td><td class="s">Copyright (c) 1996-2002 Douglas E. Wegscheid.  All rights reserved.</td></tr>
<tr><td class="h"><a name="584"></a>584</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="585"></a>585</td><td></td><td></td><td></td><td></td><td class="s">Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Jarkko Hietaniemi.</td></tr>
<tr><td class="h"><a name="586"></a>586</td><td></td><td></td><td></td><td></td><td class="s">All rights reserved.</td></tr>
<tr><td class="h"><a name="587"></a>587</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="588"></a>588</td><td></td><td></td><td></td><td></td><td class="s">This program is free software; you can redistribute it and/or modify</td></tr>
<tr><td class="h"><a name="589"></a>589</td><td></td><td></td><td></td><td></td><td class="s">it under the same terms as Perl itself.</td></tr>
<tr><td class="h"><a name="590"></a>590</td><td></td><td></td><td></td><td></td><td class="s"></td></tr>
<tr><td class="h"><a name="591"></a>591</td><td></td><td></td><td></td><td></td><td class="s">=cut</td></tr>
<tr><td class="h"><a name="Time__HiRes__CORE_subst"></a></td><td></td><td></td><td></td><td></td><td class="s"><div class="calls"><div class="calls_in"># spent 4&micro;s within Time::HiRes::CORE:subst which was called
#    once (4&micro;s+0s) by Time::HiRes::AUTOLOAD at <a href="Time-HiRes-pm-block.html#32">line 32 of Time/HiRes.pm</a></div></div>sub Time::HiRes::CORE:subst; # xsub<br />        </td></tr>
<tr><td class="h"><a name="Time__HiRes__bootstrap"></a></td><td></td><td></td><td></td><td></td><td class="s"><div class="calls"><div class="calls_in"># spent 66&micro;s within Time::HiRes::bootstrap which was called
#    once (66&micro;s+0s) by DynaLoader::bootstrap at <a href="DynaLoader-pm-block.html#227">line 227 of DynaLoader.pm</a></div></div>sub Time::HiRes::bootstrap; # xsub<br />        </td></tr>
<tr><td class="h"><a name="Time__HiRes__constant"></a></td><td></td><td></td><td></td><td></td><td class="s"><div class="calls"><div class="calls_in"># spent 8&micro;s within Time::HiRes::constant which was called
#    once (8&micro;s+0s) by Time::HiRes::AUTOLOAD at <a href="Time-HiRes-pm-block.html#35">line 35 of Time/HiRes.pm</a></div></div>sub Time::HiRes::constant; # xsub<br />        </td></tr>
</tbody></table></div>
        
            <script type="text/javascript"> $(document).ready(function() { 

        $("#subs_table").tablesorter({
            sortList: [[3,1]],
            headers: {
                3: { sorter: 'fmt_time' },
                4: { sorter: 'fmt_time' }
            }
        });
    
 } ); </script>
        
        <div class="footer">Report produced by the
        <a href="http://search.cpan.org/dist/Devel-NYTProf/">NYTProf 3.11</a>
        Perl profiler, developed by
        <a href="http://www.linkedin.com/in/timbunce">Tim Bunce</a> and
        <a href="http://code.nytimes.com">Adam Kaplan</a>.
        </div>
        <br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    </body></html>