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