--- EV/README 2007/12/22 16:48:33 1.21 +++ EV/README 2008/01/28 12:24:05 1.22 @@ -4,39 +4,39 @@ SYNOPSIS use EV; - - # TIMERS - - my $w = EV::timer 2, 0, sub { + + # TIMERS + + my $w = EV::timer 2, 0, sub { warn "is called after 2s"; }; - - my $w = EV::timer 2, 2, sub { + + my $w = EV::timer 2, 2, sub { warn "is called roughly every 2s (repeat = 2)"; }; - - undef $w; # destroy event watcher again - - my $w = EV::periodic 0, 60, 0, sub { + + undef $w; # destroy event watcher again + + my $w = EV::periodic 0, 60, 0, sub { warn "is called every minute, on the minute, exactly"; }; - - # IO - - my $w = EV::io *STDIN, EV::READ, sub { + + # IO + + my $w = EV::io *STDIN, EV::READ, sub { my ($w, $revents) = @_; # all callbacks receive the watcher and event mask warn "stdin is readable, you entered: ", ; }; - - # SIGNALS - - my $w = EV::signal 'QUIT', sub { + + # SIGNALS + + my $w = EV::signal 'QUIT', sub { warn "sigquit received\n"; }; - - # CHILD/PID STATUS CHANGES + + # CHILD/PID STATUS CHANGES - my $w = EV::child 666, sub { + my $w = EV::child 666, 0, sub { my ($w, $revents) = @_; my $status = $w->rstatus; }; @@ -46,8 +46,8 @@ my ($w, $revents) = @_; warn $w->path, " has changed somehow.\n"; }; - - # MAINLOOP + + # MAINLOOP EV::loop; # loop until EV::unloop is called or all watchers stop EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block @@ -416,13 +416,15 @@ It has three distinct "modes": - * absolute timer ($interval = $reschedule_cb = 0) + * absolute timer ($interval = $reschedule_cb = 0) + This time simply fires at the wallclock time $at and doesn't repeat. It will not adjust when a time jump occurs, that is, if it is to be run at January 1st 2011 then it will run when the system time reaches or surpasses this time. - * non-repeating interval timer ($interval > 0, $reschedule_cb = 0) + * non-repeating interval timer ($interval > 0, $reschedule_cb = 0) + In this mode the watcher will always be scheduled to time out at the next "$at + N * $interval" time (for some integer N) and then repeat, regardless of any time jumps. @@ -441,7 +443,8 @@ at the next possible time where "$time = $at (mod $interval)", regardless of any time jumps. - * manual reschedule mode ($reschedule_cb = coderef) + * manual reschedule mode ($reschedule_cb = coderef) + In this mode $interval and $at are both being ignored. Instead, each time the periodic watcher gets scheduled, the reschedule callback ($reschedule_cb) will be called with the watcher as @@ -512,14 +515,17 @@ optionally set a new one. CHILD WATCHERS - watch out for process status changes - $w = EV::child $pid, $callback - $w = EV::child_ns $pid, $callback - $w = $loop->child ($pid, $callback) - $w = $loop->child_ns ($pid, $callback) + $w = EV::child $pid, $trace, $callback + $w = EV::child_ns $pid, $trace, $callback + $w = $loop->child ($pid, $trace, $callback) + $w = $loop->child_ns ($pid, $trace, $callback) Call the callback when a status change for pid $pid (or any pid if - $pid is 0) has been received. More precisely: when the process - receives a "SIGCHLD", EV will fetch the outstanding exit/wait status - for all changed/zombie children and call the callback. + $pid is 0) has been received (a status change happens when the + process terminates or is killed, or, when trace is true, + additionally when it is stopped or continued). More precisely: when + the process receives a "SIGCHLD", EV will fetch the outstanding + exit/wait status for all changed/zombie children and call the + callback. It is valid (and fully supported) to install a child watcher after a child has exited but before the event loop has started its next @@ -536,12 +542,11 @@ The "child_ns" variant doesn't start (activate) the newly created watcher. - $w->set ($pid) + $w->set ($pid, $trace) Reconfigures the watcher, see the constructor above for details. Can be called at any time. $current_pid = $w->pid - $old_pid = $w->pid ($new_pid) Returns the previously set process id and optionally set a new one. $exit_status = $w->rstatus