Size: a a a

2020 December 19

a

allter in use Perl or die;
А для recv на такой тривиальной проге что он будет звать? Там же никакого IO нет.
источник

VG

Vadim Goncharov in use Perl or die;
а хер знает
источник

VG

Vadim Goncharov in use Perl or die;
скорее всего, select() с пустым сетом и таймаутом
источник

VG

Vadim Goncharov in use Perl or die;
я полтора года назад код читал, лень снова лезть
источник

АК

Алексей Клименко... in use Perl or die;
allter
поэтому правильно пользоваться AE`шным обработчиком сигнала + вот эту настройку latency выставлсять
Ну если я  в хендлете сигнала *только* флаг поставлю, и не выйду с программы – то, с учётом того что у меня:
• асинхронные таймеры поллят этот флаг раз в секунду, и если стоит – то выполняют свой коллбек;
• все сетевые запросы перед отправкой проверяют флаг, и если он стоит – не отправляются, а возвращают undef
– то по идее, не важно, аккауратно ли я ставлю флаг, так как он будет проверен лишь когда выполнение дойдёт до него. То есть все асинхронные коллбеки рано или поздно дойдут до проверки флага (запросы перестанут отправляться, а таймеры долгого ожидания сработают не позже чем через секунду).

И по итогу, всё в программе проработает и выйдет, потому что в меня в коде написано: если вместо ответа пришёл undef – то выйти, а не продолжать.
Вот они все и выйдут!

Ранее, пока использовал Cli – ставил флаг по вводу определённой команды в консоль.
источник

a

allter in use Perl or die;
Vadim Goncharov
скорее всего, select() с пустым сетом и таймаутом
Вот я также думаю. В общем, надо AE`шный обработчик сигналов + выставлять latency
источник

VG

Vadim Goncharov in use Perl or die;
Алексей Клименко
Ну если я  в хендлете сигнала *только* флаг поставлю, и не выйду с программы – то, с учётом того что у меня:
• асинхронные таймеры поллят этот флаг раз в секунду, и если стоит – то выполняют свой коллбек;
• все сетевые запросы перед отправкой проверяют флаг, и если он стоит – не отправляются, а возвращают undef
– то по идее, не важно, аккауратно ли я ставлю флаг, так как он будет проверен лишь когда выполнение дойдёт до него. То есть все асинхронные коллбеки рано или поздно дойдут до проверки флага (запросы перестанут отправляться, а таймеры долгого ожидания сработают не позже чем через секунду).

И по итогу, всё в программе проработает и выйдет, потому что в меня в коде написано: если вместо ответа пришёл undef – то выйти, а не продолжать.
Вот они все и выйдут!

Ранее, пока использовал Cli – ставил флаг по вводу определённой команды в консоль.
если таймеры есть, то быстрее сработает
источник

АК

Алексей Клименко... in use Perl or die;
Хм. Типа, пример некорректный?

Да, надо с таймером попробовать, ну-ка…
источник

VG

Vadim Goncharov in use Perl or die;
allter
Вот я также думаю. В общем, надо AE`шный обработчик сигналов + выставлять latency
ахаха

      $SIG_TW = AE::timer
        $MAX_SIGNAL_LATENCY - ($NOW - int $NOW),
        $MAX_SIGNAL_LATENCY,
        sub { } # just for the PERL_ASYNC_CHECK
     ;
источник

VG

Vadim Goncharov in use Perl or die;
просто внутренний костыльный таймер :)
источник

a

allter in use Perl or die;
Алексей Клименко
Хм. Типа, пример некорректный?

Да, надо с таймером попробовать, ну-ка…
Поясни (потерял суть дискуссии). Смысл в том, что евентлуп проверяет состояние кондваров только когда происходит какое-то событие из тех, которые зарегистрированы в соответствующей либе евентлупа.
источник

VG

Vadim Goncharov in use Perl or die;
короче, если таймеры уже есть, можно переменную не ставить
источник

a

allter in use Perl or die;
Vadim Goncharov
просто внутренний костыльный таймер :)
Ну, логично.
источник

a

allter in use Perl or die;
Vadim Goncharov
короче, если таймеры уже есть, можно переменную не ставить
Но в общем случае раз есть требование, то я бы поставил раз в секунду. Это не так много.
источник

АК

Алексей Клименко... in use Perl or die;
Vadim Goncharov
короче, если таймеры уже есть, можно переменную не ставить
А, понял. Типа, Ctrl+C обработается перед вызовом коллбека таймера?

Кажется, да…
источник

VG

Vadim Goncharov in use Perl or die;
ну, должен перед
источник

VG

Vadim Goncharov in use Perl or die;
а на винде как получится :)
источник

АК

Алексей Клименко... in use Perl or die;
Vadim Goncharov
ну, должен перед
Хи, попробовал.

Если там signal – то после коллбека таймера, а если и signal и SIG – то SIG вызывается перед!
источник

АК

Алексей Клименко... in use Perl or die;
И видимо, SIG съедает его, он уже в signal не доходит.
источник

a

allter in use Perl or die;
Алексей Клименко
А, понял. Типа, Ctrl+C обработается перед вызовом коллбека таймера?

Кажется, да…
Сам сигнал регистрируется в момент его поступления. Но его обработчик (send на condvar) запустится только когда управление выйдет из C`шного кода, а это произойдёт только когда что-то произойдёт с I/O, либо сработает таймер
источник