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

Comparing AnyEvent/lib/AnyEvent.pm (file contents):
Revision 1.108 by root, Sat May 10 00:22:02 2008 UTC vs.
Revision 1.110 by root, Sat May 10 00:57:31 2008 UTC

549Returns C<$AnyEvent::MODEL>, forcing autodetection of the event model 549Returns C<$AnyEvent::MODEL>, forcing autodetection of the event model
550if necessary. You should only call this function right before you would 550if necessary. You should only call this function right before you would
551have created an AnyEvent watcher anyway, that is, as late as possible at 551have created an AnyEvent watcher anyway, that is, as late as possible at
552runtime. 552runtime.
553 553
554=item $guard = AnyEvent::on_detect { BLOCK }
555
556Arranges for the code block to be executed as soon as the event model is
557autodetected (or immediately if this has already happened).
558
559If called in scalar or list context, then it creates and returns an object
560that automatically removes the callback again when it is destroyed.
561
554=item @AnyEvent::detect 562=item @AnyEvent::on_detect
555 563
556If there are any code references in this array (you can C<push> to it 564If there are any code references in this array (you can C<push> to it
557before or after loading AnyEvent), then they will called directly after 565before or after loading AnyEvent), then they will called directly after
558the event loop has been chosen. 566the event loop has been chosen.
559 567
560You should check C<$AnyEvent::MODEL> before adding to this array, though: 568You should check C<$AnyEvent::MODEL> before adding to this array, though:
561if it contains a true value then the event loop has already been detected, 569if it contains a true value then the event loop has already been detected,
562and the array will be ignored. 570and the array will be ignored.
571
572Best use C<AnyEvent::on_detect { BLOCK }> instead.
563 573
564=back 574=back
565 575
566=head1 WHAT TO DO IN A MODULE 576=head1 WHAT TO DO IN A MODULE
567 577
709 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza 719 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza
710); 720);
711 721
712our %method = map +($_ => 1), qw(io timer signal child condvar one_event DESTROY); 722our %method = map +($_ => 1), qw(io timer signal child condvar one_event DESTROY);
713 723
714our @detect; 724our @on_detect;
725
726sub on_detect(&) {
727 my ($cb) = @_;
728
729 if ($MODEL) {
730 $cb->();
731
732 1
733 } else {
734 push @on_detect, $cb;
735
736 defined wantarray
737 ? bless \$cb, "AnyEvent::Util::Guard"
738 : ()
739 }
740}
741
742sub AnyEvent::Util::Guard::DESTROY {
743 @on_detect = grep $_ != ${$_[0]}, @on_detect;
744}
715 745
716sub detect() { 746sub detect() {
717 unless ($MODEL) { 747 unless ($MODEL) {
718 no strict 'refs'; 748 no strict 'refs';
719 749
760 } 790 }
761 791
762 unshift @ISA, $MODEL; 792 unshift @ISA, $MODEL;
763 push @{"$MODEL\::ISA"}, "AnyEvent::Base"; 793 push @{"$MODEL\::ISA"}, "AnyEvent::Base";
764 794
765 (shift @detect)->() while @detect; 795 (shift @on_detect)->() while @on_detect;
766 } 796 }
767 797
768 $MODEL 798 $MODEL
769} 799}
770 800

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines