ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/README
(Generate patch)

Comparing EV/README (file contents):
Revision 1.6 by root, Thu Nov 1 17:32:39 2007 UTC vs.
Revision 1.9 by root, Mon Nov 12 01:23:21 2007 UTC

9 9
10 my $w = EV::timer 2, 0, sub { 10 my $w = EV::timer 2, 0, sub {
11 warn "is called after 2s"; 11 warn "is called after 2s";
12 }; 12 };
13 13
14 my $w = EV::timer 2, 1, sub { 14 my $w = EV::timer 2, 2, sub {
15 warn "is called roughly every 2s (repeat = 1)"; 15 warn "is called roughly every 2s (repeat = 2)";
16 }; 16 };
17 17
18 undef $w; # destroy event watcher again 18 undef $w; # destroy event watcher again
19 19
20 my $w = EV::periodic 0, 60, sub { 20 my $w = EV::periodic 0, 60, 0, sub {
21 warn "is called every minute, on the minute, exactly"; 21 warn "is called every minute, on the minute, exactly";
22 }; 22 };
23 23
24 # IO 24 # IO
25 25
26 my $w = EV::io *STDIN, EV::READ, sub { 26 my $w = EV::io *STDIN, EV::READ, sub {
27 my ($w, $revents) = @_; # all callbacks get the watcher object and event mask 27 my ($w, $revents) = @_; # all callbacks receive the watcher and event mask
28 warn "stdin is readable, you entered: ", <STDIN>; 28 warn "stdin is readable, you entered: ", <STDIN>;
29 }; 29 };
30 30
31 # SIGNALS 31 # SIGNALS
32 32
33 my $w = EV::signal 'QUIT', sub { 33 my $w = EV::signal 'QUIT', sub {
34 warn "sigquit received\n"; 34 warn "sigquit received\n";
35 }; 35 };
36 36
37 my $w = EV::signal 3, sub {
38 warn "sigquit received (this is GNU/Linux, right?)\n";
39 };
40
41 # CHILD/PID STATUS CHANGES 37 # CHILD/PID STATUS CHANGES
42 38
43 my $w = EV::child 666, sub { 39 my $w = EV::child 666, sub {
44 my ($w, $revents, $status) = @_; 40 my ($w, $revents) = @_;
41 my $status = $w->rstatus;
45 }; 42 };
46 43
47 # MAINLOOP 44 # MAINLOOP
48 EV::loop; # loop until EV::loop_done is called 45 EV::loop; # loop until EV::loop_done is called or all watchers stop
49 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled 46 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled
50 EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block 47 EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block
51 48
52DESCRIPTION 49DESCRIPTION
53 This module provides an interface to libev 50 This module provides an interface to libev
115 In the rare case where one wants to create a watcher but not start it at 112 In the rare case where one wants to create a watcher but not start it at
116 the same time, each constructor has a variant with a trailing "_ns" in 113 the same time, each constructor has a variant with a trailing "_ns" in
117 its name, e.g. EV::io has a non-starting variant EV::io_ns and so on. 114 its name, e.g. EV::io has a non-starting variant EV::io_ns and so on.
118 115
119 Please note that a watcher will automatically be stopped when the 116 Please note that a watcher will automatically be stopped when the
120 watcher object is returned, so you *need* to keep the watcher objects 117 watcher object is destroyed, so you *need* to keep the watcher objects
121 returned by the constructors. 118 returned by the constructors.
119
120 Also, all methods changing some aspect of a watcher (->set, ->priority,
121 ->fh and so on) automatically stop and start it again if it is active,
122 which means pending events get lost.
122 123
123 WATCHER TYPES 124 WATCHER TYPES
124 Now lets move to the existing watcher types and asociated methods. 125 Now lets move to the existing watcher types and asociated methods.
125 126
126 The following methods are available for all watchers. Then followes a 127 The following methods are available for all watchers. Then followes a
141 not. 142 not.
142 143
143 $bool = $w->is_active 144 $bool = $w->is_active
144 Returns true if the watcher is active, false otherwise. 145 Returns true if the watcher is active, false otherwise.
145 146
147 $current_data = $w->data
148 $old_data = $w->data ($new_data)
149 Queries a freely usable data scalar on the watcher and optionally
150 changes it. This is a way to associate custom data with a watcher:
151
152 my $w = EV::timer 60, 0, sub {
153 warn $_[0]->data;
154 };
155 $w->data ("print me!");
156
146 $current_cb = $w->cb 157 $current_cb = $w->cb
147 $old_cb = $w->cb ($new_cb) 158 $old_cb = $w->cb ($new_cb)
148 Queries the callback on the watcher and optionally changes it. You 159 Queries the callback on the watcher and optionally changes it. You
149 cna do this at any time. 160 can do this at any time without the watcher restarting.
161
162 $current_priority = $w->priority
163 $old_priority = $w->priority ($new_priority)
164 Queries the priority on the watcher and optionally changes it.
165 Pending watchers with higher priority will be invoked first. The
166 valid range of priorities lies between EV::MAXPRI (default 2) and
167 EV::MINPRI (default -2). If the priority is outside this range it
168 will automatically be normalised to the nearest valid priority.
169
170 The default priority of any newly-created weatcher is 0.
150 171
151 $w->trigger ($revents) 172 $w->trigger ($revents)
152 Call the callback *now* with the given event mask. 173 Call the callback *now* with the given event mask.
153 174
154 $w = EV::io $fileno_or_fh, $eventmask, $callback 175 $w = EV::io $fileno_or_fh, $eventmask, $callback
215 This behaviour is useful when you have a timeout for some IO 236 This behaviour is useful when you have a timeout for some IO
216 operation. You create a timer object with the same value for $after 237 operation. You create a timer object with the same value for $after
217 and $repeat, and then, in the read/write watcher, run the "again" 238 and $repeat, and then, in the read/write watcher, run the "again"
218 method on the timeout. 239 method on the timeout.
219 240
220 $w = EV::periodic $at, $interval, $callback 241 $w = EV::periodic $at, $interval, $reschedule_cb, $callback
221 $w = EV::periodic_ns $at, $interval, $callback 242 $w = EV::periodic_ns $at, $interval, $reschedule_cb, $callback
222 Similar to EV::timer, but the time is given as an absolute point in 243 Similar to EV::timer, but is not based on relative timeouts but on
223 time ($at), plus an optional $interval. 244 absolute times. Apart from creating "simple" timers that trigger
245 "at" the specified time, it can also be used for non-drifting
246 absolute timers and more complex, cron-like, setups that are not
247 adversely affected by time jumps (i.e. when the system clock is
248 changed by explicit date -s or other means such as ntpd). It is also
249 the most complex watcher type in EV.
224 250
225 If the $interval is zero, then the callback will be called at the 251 It has three distinct "modes":
226 time $at if that is in the future, or as soon as possible if it is
227 in the past. It will not automatically repeat.
228 252
229 If the $interval is nonzero, then the watcher will always be 253 * absolute timer ($interval = $reschedule_cb = 0)
230 scheduled to time out at the next "$at + N * $interval" time. 254 This time simply fires at the wallclock time $at and doesn't
255 repeat. It will not adjust when a time jump occurs, that is, if
256 it is to be run at January 1st 2011 then it will run when the
257 system time reaches or surpasses this time.
231 258
232 This can be used to schedule a callback to run at very regular 259 * non-repeating interval timer ($interval > 0, $reschedule_cb = 0)
233 intervals, as long as the processing time is less then the interval 260 In this mode the watcher will always be scheduled to time out at
234 (otherwise obviously events will be skipped). 261 the next "$at + N * $interval" time (for some integer N) and
262 then repeat, regardless of any time jumps.
235 263
264 This can be used to create timers that do not drift with respect
265 to system time:
266
267 my $hourly = EV::periodic 0, 3600, 0, sub { print "once/hour\n" };
268
269 That doesn't mean there will always be 3600 seconds in between
270 triggers, but only that the the clalback will be called when the
271 system time shows a full hour (UTC).
272
236 Another way to think about it (for the mathematically inclined) is 273 Another way to think about it (for the mathematically inclined)
237 that EV::periodic will try to run the callback at the next possible 274 is that EV::periodic will try to run the callback in this mode
238 time where "$time = $at (mod $interval)", regardless of any time 275 at the next possible time where "$time = $at (mod $interval)",
239 jumps. 276 regardless of any time jumps.
240 277
241 This periodic timer is based on "wallclock time", that is, if the 278 * manual reschedule mode ($reschedule_cb = coderef)
242 clock changes ("ntp", "date -s" etc.), then the timer will 279 In this mode $interval and $at are both being ignored. Instead,
243 nevertheless run at the specified time. This means it will never 280 each time the periodic watcher gets scheduled, the first
244 drift (it might jitter, but it will not drift). 281 callback ($reschedule_cb) will be called with the watcher as
282 first, and the current time as second argument.
283
284 *This callback MUST NOT stop or destroy this or any other
285 periodic watcher, ever*. If you need to stop it, return 1e30 and
286 stop it afterwards.
287
288 It must return the next time to trigger, based on the passed
289 time value (that is, the lowest time value larger than to the
290 second argument). It will usually be called just before the
291 callback will be triggered, but might be called at other times,
292 too.
293
294 This can be used to create very complex timers, such as a timer
295 that triggers on each midnight, local time (actually 24 hours
296 after the last midnight, to keep the example simple. If you know
297 a way to do it correctly in about the same space (without
298 requiring elaborate modules), drop me a note :):
299
300 my $daily = EV::periodic 0, 0, sub {
301 my ($w, $now) = @_;
302
303 use Time::Local ();
304 my (undef, undef, undef, $d, $m, $y) = localtime $now;
305 86400 + Time::Local::timelocal 0, 0, 0, $d, $m, $y
306 }, sub {
307 print "it's midnight or likely shortly after, now\n";
308 };
245 309
246 The "periodic_ns" variant doesn't start (activate) the newly created 310 The "periodic_ns" variant doesn't start (activate) the newly created
247 watcher. 311 watcher.
248 312
249 $w->set ($at, $interval) 313 $w->set ($at, $interval, $reschedule_cb)
250 Reconfigures the watcher, see the constructor above for details. Can 314 Reconfigures the watcher, see the constructor above for details. Can
251 be at any time. 315 be at any time.
316
317 $w->again
318 Simply stops and starts the watcher again.
252 319
253 $w = EV::signal $signal, $callback 320 $w = EV::signal $signal, $callback
254 $w = EV::signal_ns $signal, $callback 321 $w = EV::signal_ns $signal, $callback
255 Call the callback when $signal is received (the signal can be 322 Call the callback when $signal is received (the signal can be
256 specified by number or by name, just as with kill or %SIG). 323 specified by number or by name, just as with kill or %SIG).
266 watcher. 333 watcher.
267 334
268 $w->set ($signal) 335 $w->set ($signal)
269 Reconfigures the watcher, see the constructor above for details. Can 336 Reconfigures the watcher, see the constructor above for details. Can
270 be at any time. 337 be at any time.
338
339 $current_signum = $w->signal
340 $old_signum = $w->signal ($new_signal)
341 Returns the previously set signal (always as a number not name) and
342 optionally set a new one.
271 343
272 $w = EV::child $pid, $callback 344 $w = EV::child $pid, $callback
273 $w = EV::child_ns $pid, $callback 345 $w = EV::child_ns $pid, $callback
274 Call the callback when a status change for pid $pid (or any pid if 346 Call the callback when a status change for pid $pid (or any pid if
275 $pid is 0) has been received. More precisely: when the process 347 $pid is 0) has been received. More precisely: when the process
276 receives a SIGCHLD, EV will fetch the outstanding exit/wait status 348 receives a SIGCHLD, EV will fetch the outstanding exit/wait status
277 for all changed/zombie children and call the callback. 349 for all changed/zombie children and call the callback.
278 350
279 Unlike all other callbacks, this callback will be called with an 351 You can access both status and pid by using the "rstatus" and "rpid"
280 additional third argument which is the exit status. See the 352 methods on the watcher object.
281 "waitpid" function for details.
282 353
283 You can have as many pid watchers per pid as you want. 354 You can have as many pid watchers per pid as you want.
284 355
285 The "child_ns" variant doesn't start (activate) the newly created 356 The "child_ns" variant doesn't start (activate) the newly created
286 watcher. 357 watcher.
287 358
288 $w->set ($pid) 359 $w->set ($pid)
289 Reconfigures the watcher, see the constructor above for details. Can 360 Reconfigures the watcher, see the constructor above for details. Can
290 be at any time. 361 be at any time.
362
363 $current_pid = $w->pid
364 $old_pid = $w->pid ($new_pid)
365 Returns the previously set process id and optionally set a new one.
366
367 $exit_status = $w->rstatus
368 Return the exit/wait status (as returned by waitpid, see the waitpid
369 entry in perlfunc).
370
371 $pid = $w->rpid
372 Return the pid of the awaited child (useful when you have installed
373 a watcher for all pids).
291 374
292 $w = EV::idle $callback 375 $w = EV::idle $callback
293 $w = EV::idle_ns $callback 376 $w = EV::idle_ns $callback
294 Call the callback when there are no pending io, timer/periodic, 377 Call the callback when there are no pending io, timer/periodic,
295 signal or child events, i.e. when the process is idle. 378 signal or child events, i.e. when the process is idle.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines