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.109 by root, Sat May 10 00:45:18 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 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
554=item @AnyEvent::detect 559=item @AnyEvent::on_detect
555 560
556If there are any code references in this array (you can C<push> to it 561If 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 562before or after loading AnyEvent), then they will called directly after
558the event loop has been chosen. 563the event loop has been chosen.
559 564
560You should check C<$AnyEvent::MODEL> before adding to this array, though: 565You 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, 566if it contains a true value then the event loop has already been detected,
562and the array will be ignored. 567and the array will be ignored.
568
569Best use C<AnyEvent::on_detect { BLOCK }> instead.
563 570
564=back 571=back
565 572
566=head1 WHAT TO DO IN A MODULE 573=head1 WHAT TO DO IN A MODULE
567 574
709 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza 716 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza
710); 717);
711 718
712our %method = map +($_ => 1), qw(io timer signal child condvar one_event DESTROY); 719our %method = map +($_ => 1), qw(io timer signal child condvar one_event DESTROY);
713 720
714our @detect; 721our @on_detect;
722
723sub on_detect(&) {
724 if ($MODEL) {
725 $_[0]->();
726 } else {
727 push @on_detect, $_[0];
728 }
729}
715 730
716sub detect() { 731sub detect() {
717 unless ($MODEL) { 732 unless ($MODEL) {
718 no strict 'refs'; 733 no strict 'refs';
719 734
760 } 775 }
761 776
762 unshift @ISA, $MODEL; 777 unshift @ISA, $MODEL;
763 push @{"$MODEL\::ISA"}, "AnyEvent::Base"; 778 push @{"$MODEL\::ISA"}, "AnyEvent::Base";
764 779
765 (shift @detect)->() while @detect; 780 (shift @on_detect)->() while @on_detect;
766 } 781 }
767 782
768 $MODEL 783 $MODEL
769} 784}
770 785

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines