ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro.pm
(Generate patch)

Comparing Coro/Coro.pm (file contents):
Revision 1.90 by root, Thu Nov 30 18:21:14 2006 UTC vs.
Revision 1.91 by root, Fri Dec 1 02:17:37 2006 UTC

117 117
118=item $idle 118=item $idle
119 119
120A callback that is called whenever the scheduler finds no ready coroutines 120A callback that is called whenever the scheduler finds no ready coroutines
121to run. The default implementation prints "FATAL: deadlock detected" and 121to run. The default implementation prints "FATAL: deadlock detected" and
122exits. 122exits, because the program has no other way to continue.
123 123
124This hook is overwritten by modules such as C<Coro::Timer> and 124This hook is overwritten by modules such as C<Coro::Timer> and
125C<Coro::Event> to wait on an external event that hopefully wakes up some 125C<Coro::Event> to wait on an external event that hopefully wake up a
126coroutine. 126coroutine so the scheduler can run it.
127
128Please note that if your callback recursively invokes perl (e.g. for event
129handlers), then it must be prepared to be called recursively.
127 130
128=cut 131=cut
129 132
130$idle = sub { 133$idle = sub {
131 print STDERR "FATAL: deadlock detected\n"; 134 print STDERR "FATAL: deadlock detected\n";
193 196
194=item schedule 197=item schedule
195 198
196Calls the scheduler. Please note that the current process will not be put 199Calls the scheduler. Please note that the current process will not be put
197into the ready queue, so calling this function usually means you will 200into the ready queue, so calling this function usually means you will
198never be called again. 201never be called again unless something else (e.g. an event handler) calls
202ready.
203
204The canonical way to wait on external events is this:
205
206 {
207 # remember current process
208 my $current = $Coro::current;
209
210 # register a hypothetical event handler
211 on_event_invoke sub {
212 # wake up sleeping coroutine
213 $current->ready;
214 undef $current;
215 };
216
217 # call schedule until event occured.
218 # in case we are woken up for other reasons
219 # (current still defined), loop.
220 Coro::schedule while $current;
221 }
199 222
200=cut 223=cut
201 224
202=item cede 225=item cede
203 226

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines