I'm trying to combine POE with a Gtk2 event loop, but it seems that this trips up POE, which then stops processing a wheel's output.
Below is a simplified example, which starts a Gtk2 loop and a Run Wheel which counts to 10000, but POE stops processing its output after 420 and then hangs (freezes GUI). Funny thing is, you can even throw out the Gtk GUI parts, and it still fails, as long as the "use Gtk2 '-init'" line is there. As soon as that's gone, POE processes everything correctly. Would be great if someone could comment on if I'm doing something weird. -- Mike Mike Schilli p...@perlmeister.com #!/usr/local/bin/perl -w use strict; use Gtk2 '-init'; use POE::Kernel { loop => "Glib" }; use POE::Session; use POE::Wheel::Run; use POE::Filter::Stream; POE::Session->create( inline_states => { _start => \&ui_start, play => \&play, out => \&stdout_handler, }); $poe_kernel->run(); exit 0; ########################################### sub ui_start { ########################################### my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; $heap->{main_window} = Gtk2::Window->new ('toplevel'); $kernel->yield('play'); } ########################################### sub play { ########################################### my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; my $wheel = POE::Wheel::Run->new( Program => sub { print "$_\n" for 1..10000; }, StdoutFilter => POE::Filter::Stream->new(), StderrEvent => 'out', StdoutEvent => 'out', ); $heap->{player} = $wheel; } ########################################### sub stdout_handler { ########################################### my ($heap, $input, $wheel_id) = @_[HEAP, ARG0, ARG1]; print STDERR "$input\n"; }