Я пришел сюда с похожим вопросом, касающимся использования EV :: Glib, но в итоге у меня не возникло проблем с его использованием ... Так что, возможно, я упускаю то, что вы пытаетесь сделать здесь.
Вот простой скрипт, который я выбрал, чтобы проверить, как работает EV :: Glib:
use EV::Glib;
use Gtk2 '-init';
my $t = EV::timer 1, 1, sub { print "I am here!\n" };
Glib::Timeout->add(1000, sub { print "I am also here!\n" });
my $window = Gtk2::Window->new('toplevel');
$window->signal_connect(delete_event => sub { EV::unloop });
my $button = Gtk2::Button->new('Action');
$button->signal_connect(clicked => sub {
print("Hello Gtk2-EV-Perl\n");
});
$window->add($button);
$window->show_all;
EV::loop;
При этом будет работать обработчик сигнала на кнопке, а также оба события таймера. Таким образом, петля EV будет правильно управлять всем этим.
Основная проблема, которую я вижу в документации : «Этот [модуль] делает Glib совместимым с EV. Вызовы в главный цикл Glib более или менее эквивалентны вызовам EV :: loop ( , но не наоборот, вы должны использовать функции основного цикла Glib ). "
Это означает, что если вы подключаете событие EV :: loop, оно не будет приравниваться к Glib :: mainloop и поэтому может не «щекотать» (или «не щекотать») ваше событие GStreamer. Возможно, это может быть проблемой, с которой вы столкнулись, особенно если вы используете AnyEvent и его универсальные обратные вызовы, которые, вероятно, преобразуются в вызовы EV :: loop вместо вызовов Glib :: MainLoop.
Хотя это всего лишь предположение - я никогда сам не использовал GStreamer и, конечно, не знаю, чего вы пытаетесь достичь, не увидев больше кода. Но я думаю, что мой недооцененный вывод - довольно здравый совет, независимо от того: если вы используете что-то специфическое для Glib, вам, вероятно, следует подключать к нему события с помощью Glib.