… | |
… | |
195 | C<AnyEvent::Impl:xxx> modules, but can be any other class in the case |
195 | C<AnyEvent::Impl:xxx> modules, but can be any other class in the case |
196 | AnyEvent has been extended at runtime (e.g. in I<rxvt-unicode>). |
196 | AnyEvent has been extended at runtime (e.g. in I<rxvt-unicode>). |
197 | |
197 | |
198 | The known classes so far are: |
198 | The known classes so far are: |
199 | |
199 | |
|
|
200 | EV::AnyEvent based on EV (an interface to libev, best choice) |
200 | AnyEvent::Impl::Coro based on Coro::Event, best choise. |
201 | AnyEvent::Impl::Coro based on Coro::Event, second best choice. |
201 | AnyEvent::Impl::Event based on Event, also best choice :) |
202 | AnyEvent::Impl::Event based on Event, also second best choice :) |
202 | AnyEvent::Impl::Glib based on Glib, second-best choice. |
203 | AnyEvent::Impl::Glib based on Glib, second-best choice. |
203 | AnyEvent::Impl::Tk based on Tk, very bad choice. |
204 | AnyEvent::Impl::Tk based on Tk, very bad choice. |
204 | AnyEvent::Impl::Perl pure-perl implementation, inefficient. |
205 | AnyEvent::Impl::Perl pure-perl implementation, inefficient. |
205 | |
206 | |
206 | =item AnyEvent::detect |
207 | =item AnyEvent::detect |
… | |
… | |
248 | no warnings; |
249 | no warnings; |
249 | use strict; |
250 | use strict; |
250 | |
251 | |
251 | use Carp; |
252 | use Carp; |
252 | |
253 | |
253 | our $VERSION = '2.53'; |
254 | our $VERSION = '2.55'; |
254 | our $MODEL; |
255 | our $MODEL; |
255 | |
256 | |
256 | our $AUTOLOAD; |
257 | our $AUTOLOAD; |
257 | our @ISA; |
258 | our @ISA; |
258 | |
259 | |
… | |
… | |
260 | |
261 | |
261 | our @REGISTRY; |
262 | our @REGISTRY; |
262 | |
263 | |
263 | my @models = ( |
264 | my @models = ( |
264 | [Coro::Event:: => AnyEvent::Impl::Coro::], |
265 | [Coro::Event:: => AnyEvent::Impl::Coro::], |
|
|
266 | [EV:: => EV::AnyEvent::], |
265 | [Event:: => AnyEvent::Impl::Event::], |
267 | [Event:: => AnyEvent::Impl::Event::], |
266 | [Glib:: => AnyEvent::Impl::Glib::], |
268 | [Glib:: => AnyEvent::Impl::Glib::], |
267 | [Tk:: => AnyEvent::Impl::Tk::], |
269 | [Tk:: => AnyEvent::Impl::Tk::], |
268 | [AnyEvent::Impl::Perl:: => AnyEvent::Impl::Perl::], |
270 | [AnyEvent::Impl::Perl:: => AnyEvent::Impl::Perl::], |
269 | ); |
271 | ); |
… | |
… | |
347 | my (undef, %arg) = @_; |
349 | my (undef, %arg) = @_; |
348 | |
350 | |
349 | my $signal = uc $arg{signal} |
351 | my $signal = uc $arg{signal} |
350 | or Carp::croak "required option 'signal' is missing"; |
352 | or Carp::croak "required option 'signal' is missing"; |
351 | |
353 | |
352 | $SIG_CB{$signal}{$arg{cb}} = $arg{cb}; |
354 | $SIG_CB{$signal}{$arg{cb} += 0} = $arg{cb}; |
353 | $SIG{$signal} ||= sub { |
355 | $SIG{$signal} ||= sub { |
354 | $_->() for values %{ $SIG_CB{$signal} || {} }; |
356 | $_->() for values %{ $SIG_CB{$signal} || {} }; |
355 | }; |
357 | }; |
356 | |
358 | |
357 | bless [$signal, $arg{cb}], "AnyEvent::Base::Signal" |
359 | bless [$signal, $arg{cb}], "AnyEvent::Base::Signal" |
… | |
… | |
372 | our $PID_IDLE; |
374 | our $PID_IDLE; |
373 | our $WNOHANG; |
375 | our $WNOHANG; |
374 | |
376 | |
375 | sub _child_wait { |
377 | sub _child_wait { |
376 | while (0 < (my $pid = waitpid -1, $WNOHANG)) { |
378 | while (0 < (my $pid = waitpid -1, $WNOHANG)) { |
377 | $_->() for values %{ (delete $PID_CB{$pid}) || {} }; |
379 | $_->() for values %{ $PID_CB{$pid} || {} }, %{ $PID_CB{0} || {} }; |
378 | } |
380 | } |
379 | |
381 | |
380 | undef $PID_IDLE; |
382 | undef $PID_IDLE; |
381 | } |
383 | } |
382 | |
384 | |