<html><head><meta http-equiv="Content-Type" content="text/html charset=koi8-r"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Простой и не очень правильный способ:<div><br></div><div><span style="font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; font-size: 13px; line-height: 15.359375px; text-align: left; white-space: pre; background-color: rgb(250, 250, 250); ">delete $cv->{_ae_sent};</span></div><div><a href="https://metacpan.org/source/MLEHMANN/AnyEvent-7.05/lib/AnyEvent.pm#L1961">https://metacpan.org/source/MLEHMANN/AnyEvent-7.05/lib/AnyEvent.pm#L1961</a></div><div><br><div><div>Но позвольте поинтересоваться, в какой задаче у вас возникает необходимость вызывать recv?</div><div><br></div><div>В нормальном приложении на anyevent recv может встречаться только 1 раз, и то, если вместо него не написан EV::loop (что более производительно).</div><div><br></div><div>AE::cv { ... } + begin/end - это да, в большом количестве. Но не recv/send</div><div><br></div><div><blockquote type="cite">my ($t1, $t2);<br>$t1 = AE::timer 1, 0, sub {<br> warn "1st timer fired";<br> undef $t1;<br> $t2= AE::timer (1, 0, sub {<br>   undef $t2;<br>   warn "2nd timer fired";<br>   $cv->send;<br> });<br>};</blockquote><br></div><div>лучше так:</div><div><br></div><div>my $t; $t = AE::timer 1, 0, sub {</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>warn "1st";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>$t = AE::timer 1, 0, sub { # unref old and keep new</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>undef $t;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>warn "2nd";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$cv->send;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>}</div><div><br></div><div><br></div><div>On 20.11.2013, at 20:13, Anton Yuzhaninov <<a href="mailto:citrin@citrin.ru">citrin@citrin.ru</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Хочется иметь condvar, которую можно использовать повторно, но похоже $cv->recv можно сделать только один раз.<br><br>В таком коде:<br><br>use AnyEvent;<br><br>my $cv = AE::cv;<br><br>$cv->begin;<br><br>my $t1 = AE::timer 4, 0, sub { $cv->end };<br><br>warn "wait for 1st timer";<br><br>$cv->recv;<br><br>warn "1st timer fired";<br><br>$cv->begin;<br><br>my $t2 = AE::timer 3, 0, sub { $cv->end };<br><br>$cv->recv;<br><br>Второй $cv->recv возвращается сразу без ожидания $cv->end в callback от второго таймера.<br><br>Это баг или фича?<br>-- <br>Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org">http://moscow.pm.org</a><br></blockquote></div><br></div></body></html>