blob: 4831f29d260ae64a9c6dadc859db57185cdd6e4a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
use strict; use warnings; use threads; use Glib; use Queue;
my $q=Glib::Thread::Queue->new(); my $q2=Glib::Thread::Queue->new(); threads->create( sub{ print "(1) sleeping\n"; sleep 2; print "(1) sending boo\n"; $q->enqueue('boo'); sleep 2; threads->create( sub{ print "(2) inserting bar & foo\n"; $q->insert(0,'bar'); $q->insert(1,'foo'); print "(2) signaling\n"; $q->signal(); print "(2) signaling\n"; $q->signal(); }); sleep 2; print "(1) waiting for command\n"; my $cmd=$q2->dequeue; print "(1) got $cmd\n"; print "(1) sending quit"; $q->enqueue('quit'); }); my $loop=Glib::MainLoop->new(); $q->add_watch(sub{ print "(m) waking up\n"; my $foo=$q->dequeue(); print "(m) got $foo\n"; if ($foo eq 'quit') { print "(m) quitting\n"; $loop->quit; } elsif ($foo eq 'foo') { print "(m) sending command\n"; $q2->enqueue('the command'); print "(m) sent command\n"; } return Glib::SOURCE_CONTINUE; }, ); $loop->run;
|