From f747336ecc953fd9f0339e74fd1e245bc6278b06 Mon Sep 17 00:00:00 2001 From: dakkar Date: Wed, 5 Aug 2009 15:34:52 +0200 Subject: first draft --- thr.pl | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 thr.pl (limited to 'thr.pl') diff --git a/thr.pl b/thr.pl new file mode 100644 index 0000000..c648509 --- /dev/null +++ b/thr.pl @@ -0,0 +1,47 @@ +#!/usr/bin/perl +use strict; +use warnings; +use threads; +use Glib; +use Queue; + +=head1 Signaling across threads to a Glib loop + +Looks like the best way is to use a pipe + +=cut + +my $q=Glib::Thread::Queue->new(); + +threads->create( + sub{ + print "sleeping\n"; + sleep 2; + print "sending boo\n"; + $q->enqueue('boo'); + sleep 2; + print "inserting bar & foo\n"; + $q->insert(0,'bar'); + $q->insert(1,'foo'); + print "signaling\n"; + $q->signal(); + print "signaling\n"; + $q->signal(); + sleep 2; + print "sending quit"; + $q->enqueue('quit'); +}); + +my $loop=Glib::MainLoop->new(); +$q->add_watch(sub{ + print "waking up\n"; + my $foo=$q->dequeue(); + print "got $foo\n"; + if ($foo eq 'quit') { + print "quitting\n"; + $loop->quit; + } + return Glib::SOURCE_CONTINUE; + }, + ); +$loop->run; -- cgit v1.2.3