… | |
… | |
80 | |
80 | |
81 | our $idle; # idle handler |
81 | our $idle; # idle handler |
82 | our $main; # main coro |
82 | our $main; # main coro |
83 | our $current; # current coro |
83 | our $current; # current coro |
84 | |
84 | |
85 | our $VERSION = 5.132; |
85 | our $VERSION = 5.162; |
86 | |
86 | |
87 | our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub); |
87 | our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub); |
88 | our %EXPORT_TAGS = ( |
88 | our %EXPORT_TAGS = ( |
89 | prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)], |
89 | prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)], |
90 | ); |
90 | ); |
… | |
… | |
206 | Example: Create a new coro that just prints its arguments. |
206 | Example: Create a new coro that just prints its arguments. |
207 | |
207 | |
208 | async { |
208 | async { |
209 | print "@_\n"; |
209 | print "@_\n"; |
210 | } 1,2,3,4; |
210 | } 1,2,3,4; |
211 | |
|
|
212 | =cut |
|
|
213 | |
|
|
214 | sub async(&@) { |
|
|
215 | my $coro = new Coro @_; |
|
|
216 | $coro->ready; |
|
|
217 | $coro |
|
|
218 | } |
|
|
219 | |
211 | |
220 | =item async_pool { ... } [@args...] |
212 | =item async_pool { ... } [@args...] |
221 | |
213 | |
222 | Similar to C<async>, but uses a coro pool, so you should not call |
214 | Similar to C<async>, but uses a coro pool, so you should not call |
223 | terminate or join on it (although you are allowed to), and you get a |
215 | terminate or join on it (although you are allowed to), and you get a |
… | |
… | |
398 | } |
390 | } |
399 | |
391 | |
400 | # use like this: |
392 | # use like this: |
401 | timeslice { |
393 | timeslice { |
402 | # The following is an endless loop that would normally |
394 | # The following is an endless loop that would normally |
403 | # monopolise the process. Sicne it runs in a timeslice |
395 | # monopolise the process. Since it runs in a timesliced |
404 | # environment, it will regularly cede to other threads. |
396 | # environment, it will regularly cede to other threads. |
405 | while () { } |
397 | while () { } |
406 | }; |
398 | }; |
407 | |
399 | |
408 | |
400 | |
… | |
… | |
751 | Wait for the specified rouse callback (or the last one that was created in |
743 | Wait for the specified rouse callback (or the last one that was created in |
752 | this coro). |
744 | this coro). |
753 | |
745 | |
754 | As soon as the callback is invoked (or when the callback was invoked |
746 | As soon as the callback is invoked (or when the callback was invoked |
755 | before C<rouse_wait>), it will return the arguments originally passed to |
747 | before C<rouse_wait>), it will return the arguments originally passed to |
756 | the rouse callback. |
748 | the rouse callback. In scalar context, that means you get the I<last> |
|
|
749 | argument, just as if C<rouse_wait> had a C<return ($a1, $a2, $a3...)> |
|
|
750 | statement at the end. |
757 | |
751 | |
758 | See the section B<HOW TO WAIT FOR A CALLBACK> for an actual usage example. |
752 | See the section B<HOW TO WAIT FOR A CALLBACK> for an actual usage example. |
759 | |
753 | |
760 | =back |
754 | =back |
761 | |
755 | |