1IPC::Run::Timer(3)    User Contributed Perl Documentation   IPC::Run::Timer(3)
2
3
4

NAME

6       IPC::Run::Timer -- Timer channels for IPC::Run.
7

SYNOPSIS

9          use IPC::Run qw( run  timer timeout );
10          ## or IPC::Run::Timer ( timer timeout );
11          ## or IPC::Run::Timer ( :all );
12
13          ## A non-fatal timer:
14          $t = timer( 5 ); # or...
15          $t = IO::Run::Timer->new( 5 );
16          run $t, ...;
17
18          ## A timeout (which is a timer that dies on expiry):
19          $t = timeout( 5 ); # or...
20          $t = IO::Run::Timer->new( 5, exception => "harness timed out" );
21

DESCRIPTION

23       This class and module allows timers and timeouts to be created for use
24       by IPC::Run.  A timer simply expires when it's time is up.  A timeout
25       is a timer that throws an exception when it expires.
26
27       Timeouts are usually a bit simpler to use  than timers: they throw an
28       exception on expiration so you don't need to check them:
29
30          ## Give @cmd 10 seconds to get started, then 5 seconds to respond
31          my $t = timeout( 10 );
32          $h = start(
33             \@cmd, \$in, \$out,
34             $t,
35          );
36          pump $h until $out =~ /prompt/;
37
38          $in = "some stimulus";
39          $out = '';
40          $t->time( 5 )
41          pump $h until $out =~ /expected response/;
42
43       You do need to check timers:
44
45          ## Give @cmd 10 seconds to get started, then 5 seconds to respond
46          my $t = timer( 10 );
47          $h = start(
48             \@cmd, \$in, \$out,
49             $t,
50          );
51          pump $h until $t->is_expired || $out =~ /prompt/;
52
53          $in = "some stimulus";
54          $out = '';
55          $t->time( 5 )
56          pump $h until $out =~ /expected response/ || $t->is_expired;
57
58       Timers and timeouts that are reset get started by start() and pump().
59       Timers change state only in pump().  Since run() and finish() both call
60       pump(), they act like pump() with repect to timers.
61
62       Timers and timeouts have three states: reset, running, and expired.
63       Setting the timeout value resets the timer, as does calling the reset()
64       method.  The start() method starts (or restarts) a timer with the most
65       recently set time value, no matter what state it's in.
66
67   Time values
68       All time values are in seconds.  Times may be specified as integer or
69       floating point seconds, optionally preceded by puncuation-separated
70       days, hours, and minutes.\
71
72       Examples:
73
74          1           1 second
75          1.1         1.1 seconds
76          60          60 seconds
77          1:0         1 minute
78          1:1         1 minute, 1 second
79          1:90        2 minutes, 30 seconds
80          1:2:3:4.5   1 day, 2 hours, 3 minutes, 4.5 seconds
81
82       Absolute date/time strings are *not* accepted: year, month and day-of-
83       month parsing is not available (patches welcome :-).
84
85   Interval fudging
86       When calculating an end time from a start time and an interval,
87       IPC::Run::Timer instances add a little fudge factor.  This is to ensure
88       that no time will expire before the interval is up.
89
90       First a little background.  Time is sampled in discrete increments.
91       We'll call the exact moment that the reported time increments from one
92       interval to the next a tick, and the interval between ticks as the time
93       period.  Here's a diagram of three ticks and the periods between them:
94
95           -0-0-0-0-0-0-0-0-0-0-1-1-1-1-1-1-1-1-1-1-2-...
96           ^                   ^                   ^
97           |<--- period 0 ---->|<--- period 1 ---->|
98           |                   |                   |
99         tick 0              tick 1              tick 2
100
101       To see why the fudge factor is necessary, consider what would happen
102       when a timer with an interval of 1 second is started right at the end
103       of period 0:
104
105           -0-0-0-0-0-0-0-0-0-0-1-1-1-1-1-1-1-1-1-1-2-...
106           ^                ^  ^                   ^
107           |                |  |                   |
108           |                |  |                   |
109         tick 0             |tick 1              tick 2
110                            |
111                        start $t
112
113       Assuming that check() is called many times per period, then the timer
114       is likely to expire just after tick 1, since the time reported will
115       have lept from the value '0' to the value '1':
116
117           -0-0-0-0-0-0-0-0-0-0-1-1-1-1-1-1-1-1-1-1-2-...
118           ^                ^  ^   ^               ^
119           |                |  |   |               |
120           |                |  |   |               |
121         tick 0             |tick 1|             tick 2
122                            |      |
123                        start $t   |
124                                   |
125                               check $t
126
127       Adding a fudge of '1' in this example means that the timer is
128       guaranteed not to expire before tick 2.
129
130       The fudge is not added to an interval of '0'.
131
132       This means that intervals guarantee a minimum interval.  Given that the
133       process running perl may be suspended for some period of time, or that
134       it gets busy doing something time-consuming, there are no other
135       guarantees on how long it will take a timer to expire.
136

SUBCLASSING

138       INCOMPATIBLE CHANGE: Due to the awkwardness introduced by ripping
139       pseudohashes out of Perl, this class no longer uses the fields pragma.
140

FUNCTIONS & METHODS

142       timer
143           A constructor function (not method) of IPC::Run::Timer instances:
144
145              $t = timer( 5 );
146              $t = timer( 5, name => 'stall timer', debug => 1 );
147
148              $t = timer;
149              $t->interval( 5 );
150
151              run ..., $t;
152              run ..., $t = timer( 5 );
153
154           This convenience function is a shortened spelling of
155
156              IPC::Run::Timer->new( ... );
157
158           .  It returns a timer in the reset state with a given interval.
159
160           If an exception is provided, it will be thrown when the timer
161           notices that it has expired (in check()).  The name is for
162           debugging usage, if you plan on having multiple timers around.  If
163           no name is provided, a name like "timer #1" will be provided.
164
165       timeout
166           A constructor function (not method) of IPC::Run::Timer instances:
167
168              $t = timeout( 5 );
169              $t = timeout( 5, exception => "kablooey" );
170              $t = timeout( 5, name => "stall", exception => "kablooey" );
171
172              $t = timeout;
173              $t->interval( 5 );
174
175              run ..., $t;
176              run ..., $t = timeout( 5 );
177
178           A This convenience function is a shortened spelling of
179
180              IPC::Run::Timer->new( exception => "IPC::Run: timeout ...", ... );
181
182           .  It returns a timer in the reset state that will throw an
183           exception when it expires.
184
185           Takes the same parameters as "timer", any exception passed in
186           overrides the default exception.
187
188       new
189              IPC::Run::Timer->new()  ;
190              IPC::Run::Timer->new( 5 )  ;
191              IPC::Run::Timer->new( 5, exception => 'kablooey' )  ;
192
193           Constructor.  See "timer" for details.
194
195       check
196              check $t;
197              check $t, $now;
198              $t->check;
199
200           Checks to see if a timer has expired since the last check.  Has no
201           effect on non-running timers.  This will throw an exception if one
202           is defined.
203
204           IPC::Run::pump() calls this routine for any timers in the harness.
205
206           You may pass in a version of now, which is useful in case you have
207           it lying around or you want to check several timers with a
208           consistent concept of the current time.
209
210           Returns the time left before end_time or 0 if end_time is no longer
211           in the future or the timer is not running (unless, of course,
212           check() expire()s the timer and this results in an exception being
213           thrown).
214
215           Returns undef if the timer is not running on entry, 0 if check()
216           expires it, and the time left if it's left running.
217
218       debug
219           Sets/gets the current setting of the debugging flag for this timer.
220           This has no effect if debugging is not enabled for the current
221           harness.
222
223       end_time
224              $et = $t->end_time;
225              $et = end_time $t;
226
227              $t->end_time( time + 10 );
228
229           Returns the time when this timer will or did expire.  Even if this
230           time is in the past, the timer may not be expired, since check()
231           may not have been called yet.
232
233           Note that this end_time is not start_time($t) + interval($t), since
234           some small extra amount of time is added to make sure that the
235           timer does not expire before interval() elapses.  If this were not
236           so, then
237
238           Changing end_time() while a timer is running will set the
239           expiration time.  Changing it while it is expired has no affect,
240           since reset()ing a timer always clears the end_time().
241
242       exception
243              $x = $t->exception;
244              $t->exception( $x );
245              $t->exception( undef );
246
247           Sets/gets the exception to throw, if any.  'undef' means that no
248           exception will be thrown.  Exception does not need to be a scalar:
249           you may ask that references be thrown.
250
251       interval
252              $i = interval $t;
253              $i = $t->interval;
254              $t->interval( $i );
255
256           Sets the interval.  Sets the end time based on the start_time() and
257           the interval (and a little fudge) if the timer is running.
258
259       expire
260              expire $t;
261              $t->expire;
262
263           Sets the state to expired (undef).  Will throw an exception if one
264           is defined and the timer was not already expired.  You can expire a
265           reset timer without starting it.
266
267       is_running
268       is_reset
269       is_expired
270       name
271           Sets/gets this timer's name.  The name is only used for debugging
272           purposes so you can tell which freakin' timer is doing what.
273
274       reset
275              reset $t;
276              $t->reset;
277
278           Resets the timer to the non-running, non-expired state and clears
279           the end_time().
280
281       start
282              start $t;
283              $t->start;
284              start $t, $interval;
285              start $t, $interval, $now;
286
287           Starts or restarts a timer.  This always sets the start_time.  It
288           sets the end_time based on the interval if the timer is running or
289           if no end time has been set.
290
291           You may pass an optional interval or current time value.
292
293           Not passing a defined interval causes the previous interval setting
294           to be re-used unless the timer is reset and an end_time has been
295           set (an exception is thrown if no interval has been set).
296
297           Not passing a defined current time value causes the current time to
298           be used.
299
300           Passing a current time value is useful if you happen to have a time
301           value lying around or if you want to make sure that several timers
302           are started with the same concept of start time.  You might even
303           need to lie to an IPC::Run::Timer, occasionally.
304
305       start_time
306           Sets/gets the start time, in seconds since the epoch.  Setting this
307           manually is a bad idea, it's better to call "start"() at the
308           correct time.
309
310       state
311              $s = state $t;
312              $t->state( $s );
313
314           Get/Set the current state.  Only use this if you really need to
315           transfer the state to/from some variable.  Use "expire", "start",
316           "reset", "is_expired", "is_running", "is_reset".
317
318           Note:  Setting the state to 'undef' to expire a timer will not
319           throw an exception.
320

TODO

322       use Time::HiRes; if it's present.
323
324       Add detection and parsing of [[[HH:]MM:]SS formatted times and
325       intervals.
326

AUTHOR

328       Barrie Slaymaker <barries@slaysys.com>
329
330
331
332perl v5.10.1                      2009-07-13                IPC::Run::Timer(3)
Impressum