ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/EV/EV.pm
Revision: 1.26
Committed: Mon Nov 10 04:37:24 2008 UTC (15 years, 6 months ago) by root
Branch: MAIN
CVS Tags: rel-4_91, rel-4_901, rel-4_911
Changes since 1.25: +1 -1 lines
Log Message:
4.91

File Contents

# Content
1 =head1 NAME
2
3 Coro::EV - do events the coro-way
4
5 =head1 SYNOPSIS
6
7 use Coro;
8 use Coro::EV;
9
10 EV::loop;
11
12 =head1 DESCRIPTION
13
14 This module does two things: First, it offers some utility functions that
15 might be useful for coroutines, and secondly, it integrates Coro into the
16 EV main loop:
17
18 Before the process blocks (in EV::loop) to wait for events, this module
19 will schedule and run all ready (= runnable) coroutines of the same or
20 higher priority. After that, it will cede once to a coroutine of lower
21 priority, then continue in the event loop.
22
23 That means that coroutines with the same or higher pripority as the
24 coroutine running the main loop will inhibit event processing, while
25 coroutines of lower priority will get the CPU, but cannot completeley
26 inhibit event processing.
27
28 =head2 RUNNING WITH OR WITHOUT A MAINLOOP
29
30 In general, you should always run EV::loop, either in your main program,
31 or in a separate coroutine. If you don't do that and all coroutines start
32 waiting for some events, this module will run the event loop once, but
33 this is very inefficient.
34
35 =head1 FUNCTIONS
36
37 =over 4
38
39 =cut
40
41 package Coro::EV;
42
43 no warnings;
44 use strict;
45
46 use Carp;
47 no warnings;
48
49 use Coro;
50
51 use EV ();
52 use XSLoader;
53
54 BEGIN {
55 our $VERSION = 4.91;
56
57 local $^W = 0; # avoid redefine warning for Coro::ready;
58 XSLoader::load __PACKAGE__, $VERSION;
59 }
60
61 our $IDLE = new Coro sub {
62 while () {
63 &_loop_oneshot;
64 &Coro::schedule;
65 }
66 };
67 $IDLE->{desc} = "[EV idle process]";
68
69 $Coro::idle = sub { $IDLE->ready };
70
71 =item $revents = Coro::EV::timed_io_once $fileno_or_fh, $events, $timeout
72
73 Blocks the coroutine until either the given event set has occured on the
74 fd, or the timeout has been reached (if timeout is zero, there is no
75 timeout). Returns the received flags.
76
77 =cut
78
79 sub timed_io_once($$;$) {
80 &_timed_io_once;
81 do { &Coro::schedule } while !$#_;
82 pop
83 }
84
85 =item Coro::EV::timer_once $after
86
87 Blocks the coroutine for at least C<$after> seconds.
88
89 =cut
90
91 sub timer_once($) {
92 &_timer_once;
93 do { &Coro::schedule } while !$#_;
94 pop
95 }
96
97 sub readable_ev {
98 _readable_ev $_[0], my $done;
99 do { &Coro::schedule } while !defined $done;
100 $done
101 }
102
103 sub writable_ev {
104 _writable_ev $_[0], my $done;
105 do { &Coro::schedule } while !defined $done;
106 $done
107 }
108
109 1;
110
111 =back
112
113 =head1 AUTHOR
114
115 Marc Lehmann <schmorp@schmorp.de>
116 http://home.schmorp.de/
117
118 =cut
119