I once wrote a POE::API module that had a do_events_until and wait_until
methods that would let the kernel do other things until a variable was set
or a time passed - they both used run_one_timeslice but I found that that
method didnt have the granularity that my methods needed.  ie. they would
run multiple events rather than just one or a few

On 3/8/07, Sun Yi-Ming <[EMAIL PROTECTED]> wrote:

Hi POE,
   I formerly write a lot of event_driven code, and always involv
using a pattern like
while (not $done) {
    do_sth_normally();
    loop_once();
},
  I also see about the run_one_timeslice method in Kernel, and I
always invented a little toy as   workhorse to do that normally work:

package POE::Component::Normal::Workhorse;

use POE;

sub spawn {
        $mi = shift;
        my %params = @_;
        my $done = delete $params{check_end};
        my $work = delete $params{work};
        my $context = delete $params{context};
        POE::Session->create
                ( inline_states => {
                        _start => sub { $_[KERNEL]->yield( workhorse ) },
                        workhorse => sub {
                                return if $done->();
                                $_[KERNEL]->yield( workhorse );
                                $work->($_[HEAP]->{context});
                        },
                  }
                );
}


package main;

use POE;

my $done = 0;
POE::Component::Normal::Workhorse->spawn
        ( check_end => sub { return $done },
          work => sub { print "run once\n" },
          context => {},
        );

Is it somewhat useful or thorough rubbish?

--
Sincerely,

孙一鸣 Simon Sun
--
Be a man with simple interface.

Reply via email to