ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Impl/Glib.pm
Revision: 1.8
Committed: Fri Nov 24 14:50:12 2006 UTC (17 years, 6 months ago) by root
Branch: MAIN
CVS Tags: rel-2_1
Changes since 1.7: +2 -0 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 package AnyEvent::Impl::Glib;
2
3 no warnings;
4
5 use Glib ();
6
7 my $maincontext = Glib::MainContext->default;
8
9 sub io {
10 my ($class, %arg) = @_;
11
12 my $self = bless \%arg, $class;
13 my $rcb = \$self->{cb};
14
15 # some glibs need hup, others error with it, YMMV
16 push @cond, "in", "hup" if $self->{poll} eq "r";
17 push @cond, "out", "hup" if $self->{poll} eq "w";
18
19 $self->{source} = add_watch Glib::IO fileno $self->{fh}, \@cond, sub {
20 $$rcb->();
21 ! ! $$rcb
22 };
23
24 $self
25 }
26
27 sub timer {
28 my ($class, %arg) = @_;
29
30 my $self = bless \%arg, $class;
31 my $cb = $self->{cb};
32
33 $self->{source} = add Glib::Timeout $self->{after} * 1000, sub {
34 $cb->();
35 0
36 };
37
38 $self
39 }
40
41 sub DESTROY {
42 my ($self) = @_;
43
44 remove Glib::Source delete $self->{source} if $self->{source};
45 # need to undef $cb because we hold references to it
46 $self->{cb} = undef;
47 %$self = ();
48 }
49
50 sub condvar {
51 my $class = shift;
52
53 bless \my $flag, $class
54 }
55
56 sub broadcast {
57 ${$_[0]}++;
58 }
59
60 sub wait {
61 $maincontext->iteration (1) while !${$_[0]};
62 }
63
64 sub one_event {
65 $maincontext->iteration (1);
66 }
67
68 1
69