… | |
… | |
652 | Coro::on_enter { |
652 | Coro::on_enter { |
653 | # on entering the thread, we set an VTALRM handler to cede |
653 | # on entering the thread, we set an VTALRM handler to cede |
654 | $SIG{VTALRM} = sub { cede }; |
654 | $SIG{VTALRM} = sub { cede }; |
655 | # and then start the interval timer |
655 | # and then start the interval timer |
656 | Time::HiRes::setitimer &Time::HiRes::ITIMER_VIRTUAL, 0.01, 0.01; |
656 | Time::HiRes::setitimer &Time::HiRes::ITIMER_VIRTUAL, 0.01, 0.01; |
657 | }; |
657 | }; |
658 | Coro::on_leave { |
658 | Coro::on_leave { |
659 | # on leaving the thread, we stop the interval timer again |
659 | # on leaving the thread, we stop the interval timer again |
660 | Time::HiRes::setitimer &Time::HiRes::ITIMER_VIRTUAL, 0, 0; |
660 | Time::HiRes::setitimer &Time::HiRes::ITIMER_VIRTUAL, 0, 0; |
661 | }; |
661 | }; |
662 | |
662 | |
663 | &{+shift}; |
663 | &{+shift}; |
664 | } |
664 | } |
665 | |
665 | |
666 | # use like this: |
666 | # use like this: |
667 | timeslice { |
667 | timeslice { |
668 | # The following is an endless loop that would normally |
668 | # The following is an endless loop that would normally |
669 | # monopolise the process. Since it runs in a timesliced |
669 | # monopolise the process. Since it runs in a timesliced |
670 | # environment, it will regularly cede to other threads. |
670 | # environment, it will regularly cede to other threads. |
671 | while () { } |
671 | while () { } |
672 | }; |
672 | }; |
673 | |
673 | |
674 | |
674 | |
675 | =item killall |
675 | =item killall |
676 | |
676 | |
677 | Kills/terminates/cancels all coros except the currently running one. |
677 | Kills/terminates/cancels all coros except the currently running one. |
… | |
… | |
914 | that is, after it's resources have been freed but before it is joined. The |
914 | that is, after it's resources have been freed but before it is joined. The |
915 | callback gets passed the terminate/cancel arguments, if any, and I<must |
915 | callback gets passed the terminate/cancel arguments, if any, and I<must |
916 | not> die, under any circumstances. |
916 | not> die, under any circumstances. |
917 | |
917 | |
918 | There can be any number of C<on_destroy> callbacks per coro, and there is |
918 | There can be any number of C<on_destroy> callbacks per coro, and there is |
919 | no way currently to remove a callback once added. |
919 | currently no way to remove a callback once added. |
920 | |
920 | |
921 | =item $oldprio = $coro->prio ($newprio) |
921 | =item $oldprio = $coro->prio ($newprio) |
922 | |
922 | |
923 | Sets (or gets, if the argument is missing) the priority of the |
923 | Sets (or gets, if the argument is missing) the priority of the |
924 | coro thread. Higher priority coro get run before lower priority |
924 | coro thread. Higher priority coro get run before lower priority |