Что означает send / recv / begin / end для condvar AnyEvent? - PullRequest
3 голосов
/ 14 октября 2011

Я в недоумении, что это значит, хотя я прочитал несколько примеров:

#!/usr/bin/perl
use strict;
use AnyEvent;

my $cv = AnyEvent->condvar( cb => sub {
    warn "done";
});

for my $i (1..10) {
    $cv->begin;
    my $w; $w = AnyEvent->timer(after => $i, cb => sub {
    warn "finished timer $i";
    undef $w;
    $cv->end;
    });
}

$cv->recv;

Может кто-нибудь объяснить более подробно, что делает send/recv/begin/end?

UPDATE

my $i = 1;
my $s = sub {
    print $i;
};
my $i = 10;
$s->();  # 1

1 Ответ

4 голосов
/ 14 октября 2011

В указанном вами коде есть condvar для предотвращения преждевременного выхода из программы. Без recv программа прекратит работу до того, как таймеры смогут сработать. С recv все десять таймеров должны сработать до того, как recv вернется.

recv заблокируется, если send никогда не вызывался. Он будет разблокирован при вызове send.

begin и end является альтернативой использованию send. Когда было end вызовов столько же, сколько было begin вызовов, происходит send.

AnyEvent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...