… | |
… | |
597 | my $busy; |
597 | my $busy; |
598 | |
598 | |
599 | while () { |
599 | while () { |
600 | next_job: |
600 | next_job: |
601 | |
601 | |
|
|
602 | Coro::cede; |
|
|
603 | |
602 | my $avail = cf::till_tick; |
604 | my $avail = cf::till_tick; |
603 | |
605 | |
604 | for (0 .. $#SLOT_QUEUE) { |
606 | for (0 .. $#SLOT_QUEUE) { |
605 | if ($SLOT_QUEUE[$_][0] <= $avail) { |
607 | if ($SLOT_QUEUE[$_][0] <= $avail) { |
606 | $busy = 0; |
608 | $busy = 0; |
607 | my $job = splice @SLOT_QUEUE, $_, 1, (); |
609 | my $job = splice @SLOT_QUEUE, $_, 1, (); |
608 | $job->[2]->send; |
610 | $job->[2]->send; |
609 | Coro::cede; |
|
|
610 | goto next_job; |
611 | goto next_job; |
611 | } else { |
612 | } else { |
612 | $SLOT_QUEUE[$_][0] *= $SLOT_DECAY; |
613 | $SLOT_QUEUE[$_][0] *= $SLOT_DECAY; |
613 | } |
614 | } |
614 | } |
615 | } |
615 | |
616 | |
616 | if (@SLOT_QUEUE) { |
617 | if (@SLOT_QUEUE) { |
617 | # we do not use wait_for_tick() as it returns immediately when tick is inactive |
618 | wait_for_tick; |
618 | $WAIT_FOR_TICK->wait; |
|
|
619 | } else { |
619 | } else { |
620 | $busy = 0; |
620 | $busy = 0; |
621 | Coro::schedule; |
621 | Coro::schedule; |
622 | } |
622 | } |
623 | } |
623 | } |