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

File Contents

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