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

Comparing EV/EV.pm (file contents):
Revision 1.44 by root, Thu Nov 22 04:52:23 2007 UTC vs.
Revision 1.48 by root, Fri Nov 23 13:09:02 2007 UTC

117innermost call to EV::loop return. 117innermost call to EV::loop return.
118 118
119When called with an argument of EV::UNLOOP_ALL, all calls to EV::loop will return as 119When called with an argument of EV::UNLOOP_ALL, all calls to EV::loop will return as
120fast as possible. 120fast as possible.
121 121
122=item EV::once $fh_or_undef, $events, $timeout, $cb->($revents)
123
124This function rolls together an I/O and a timer watcher for a single
125one-shot event without the need for managing a watcher object.
126
127If C<$fh_or_undef> is a filehandle or file descriptor, then C<$events>
128must be a bitset containing either C<EV::READ>, C<EV::WRITE> or C<EV::READ
129| EV::WRITE>, indicating the type of I/O event you want to wait for. If
130you do not want to wait for some I/O event, specify C<undef> for
131C<$fh_or_undef> and C<0> for C<$events>).
132
133If timeout is C<undef> or negative, then there will be no
134timeout. Otherwise a EV::timer with this value will be started.
135
136When an error occurs or either the timeout or I/O watcher triggers, then
137the callback will be called with the received event set (in general
138you can expect it to be a combination of C<EV:ERROR>, C<EV::READ>,
139C<EV::WRITE> and C<EV::TIMEOUT>).
140
141EV::once doesn't return anything: the watchers stay active till either
142of them triggers, then they will be stopped and freed, and the callback
143invoked.
144
122=back 145=back
123 146
124=head2 WATCHER 147=head2 WATCHER
125 148
126A watcher is an object that gets created to record your interest in some 149A watcher is an object that gets created to record your interest in some
493 # do nothing unless active 516 # do nothing unless active
494 $dispatcher->{_event_queue_h} 517 $dispatcher->{_event_queue_h}
495 or return; 518 or return;
496 519
497 # make the dispatcher handle any outstanding stuff 520 # make the dispatcher handle any outstanding stuff
521 ... not shown
498 522
499 # create an IO watcher for each and every socket 523 # create an IO watcher for each and every socket
500 @snmp_watcher = ( 524 @snmp_watcher = (
501 (map { EV::io $_, EV::READ, sub { } } 525 (map { EV::io $_, EV::READ, sub { } }
502 keys %{ $dispatcher->{_descriptors} }), 526 keys %{ $dispatcher->{_descriptors} }),
527
528 EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE]
529 ? $event->[Net::SNMP::Dispatcher::_TIME] - EV::now : 0),
530 0, sub { },
503 ); 531 );
504
505 # if there are any timeouts, also create a timer
506 push @snmp_watcher, EV::timer $event->[Net::SNMP::Dispatcher::_TIME] - EV::now, 0, sub { }
507 if $event->[Net::SNMP::Dispatcher::_ACTIVE];
508 }; 532 };
509 533
510The callbacks are irrelevant, the only purpose of those watchers is 534The callbacks are irrelevant (and are not even being called), the
511to wake up the process as soon as one of those events occurs (socket 535only purpose of those watchers is to wake up the process as soon as
512readable, or timer timed out). The corresponding EV::check watcher will then 536one of those events occurs (socket readable, or timer timed out). The
513clean up: 537corresponding EV::check watcher will then clean up:
514 538
515 our $snmp_check = EV::check sub { 539 our $snmp_check = EV::check sub {
516 # destroy all watchers 540 # destroy all watchers
517 @snmp_watcher = (); 541 @snmp_watcher = ();
518 542
519 # make the dispatcher handle any new stuff 543 # make the dispatcher handle any new stuff
544 ... not shown
520 }; 545 };
521 546
522The callbacks of the created watchers will not be called as the watchers 547The callbacks of the created watchers will not be called as the watchers
523are destroyed before this cna happen (remember EV::check gets called 548are destroyed before this cna happen (remember EV::check gets called
524first). 549first).
527 552
528=back 553=back
529 554
530=head1 THREADS 555=head1 THREADS
531 556
532Threads are not supported by this in any way. Perl pseudo-threads is evil 557Threads are not supported by this module in any way. Perl pseudo-threads
533stuff and must die. 558is evil stuff and must die. As soon as Perl gains real threads I will work
559on thread support for it.
560
561=head1 FORK
562
563Most of the "improved" event delivering mechanisms of modern operating
564systems have quite a few problems with fork(2) (to put it bluntly: it is
565not supported and usually destructive). Libev makes it possible to work
566around this by having a function that recreates the kernel state after
567fork in the child.
568
569On non-win32 platforms, this module requires the pthread_atfork
570functionality to do this automatically for you. This function is quite
571buggy on most BSDs, though, so YMMV. The overhead for this is quite
572negligible, because everything the function currently does is set a flag
573that is checked only when the event loop gets used the next time, so when
574you do fork but not use EV, the overhead is minimal.
575
576On win32, there is no notion of fork so all this doesn't apply, of course.
534 577
535=cut 578=cut
536 579
537our $DIED = sub { 580our $DIED = sub {
538 warn "EV: error in callback (ignoring): $@"; 581 warn "EV: error in callback (ignoring): $@";

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines