История изменений
Исправление
gh0stwizard,
(текущая версия)
:
Одна из интересных особенностей интерфейса AnyEvent — это необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;
my $w = AE::timer 1, 1, sub {
my ($x) = @_;
AE::log fatal => "bullshit: %s", encode_json($x->data());
};
$w->data({"truth" => "somewhere else"});
EV::run;
Надеюсь не надо пояснять почему так работает?
Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.
Пруф в студию или не было.
#!/usr/bin/perl
use EV;
use AnyEvent;
my $cv = AE::cv;
my $t = AE::timer 1, 1, sub {
AE::log error => "ales good";
};
my $t = AE::timer 1, 1, sub {
AE::log error => "bullshit 2", $cv->recv();
};
EV::run;
Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
$EV::DIED = sub {
AE::log fatal => "$@";
};
my $t = AE::timer 1, 1, sub {
die "bullshit 3";
};
EV::run;
Исправление
gh0stwizard,
:
Одна из интересных особенностей интерфейса AnyEvent — это
необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;
my $w = AE::timer 1, 1, sub {
my ($x) = @_;
AE::log fatal => "bullshit: %s", encode_json($x->data());
};
$w->data({"truth" => "somewhere else"});
EV::run;
Надеюсь не надо пояснять почему так работает?
Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.
Пруф в студию или не было.
#!/usr/bin/perl
use EV;
use AnyEvent;
my $cv = AE::cv;
my $t = AE::timer 1, 1, sub {
AE::log error => "ales good";
};
my $t = AE::timer 1, 1, sub {
AE::log error => "bullshit 2", $cv->recv();
};
EV::run;
Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
$EV::DIED = sub {
AE::log fatal => "$@";
};
my $t = AE::timer 1, 1, sub {
die "bullshit 3";
};
EV::run;
Исправление
gh0stwizard,
:
Одна из интересных особенностей интерфейса AnyEvent — это
необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;
my $w = AE::timer 1, 1, sub {
my ($x) = @_;
AE::log fatal => "bullshit: %s", encode_json($x->data());
};
EV::run;
Надеюсь не надо пояснять почему так работает?
Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.
Пруф в студию или не было.
#!/usr/bin/perl
use EV;
use AnyEvent;
my $cv = AE::cv;
my $t = AE::timer 1, 1, sub {
AE::log error => "ales good";
};
my $t = AE::timer 1, 1, sub {
AE::log error => "bullshit 2", $cv->recv();
};
EV::run;
Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
$EV::DIED = sub {
AE::log fatal => "$@";
};
my $t = AE::timer 1, 1, sub {
die "bullshit 3";
};
EV::run;
Исправление
gh0stwizard,
:
Одна из интересных особенностей интерфейса AnyEvent — это
необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;
my $w = AE::timer 1, 1, sub {
my ($x) = @_;
AE::log fatal => "bullshit: %s", encode($x->data());
};
EV::run;
Надеюсь не надо пояснять почему так работает?
Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.
Пруф в студию или не было.
#!/usr/bin/perl
use EV;
use AnyEvent;
my $cv = AE::cv;
my $t = AE::timer 1, 1, sub {
AE::log error => "ales good";
};
my $t = AE::timer 1, 1, sub {
AE::log error => "bullshit 2", $cv->recv();
};
EV::run;
Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
$EV::DIED = sub {
AE::log fatal => "$@";
};
my $t = AE::timer 1, 1, sub {
die "bullshit 3";
};
EV::run;
Исходная версия
gh0stwizard,
:
Одна из интересных особенностей интерфейса AnyEvent — это
необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;
my $w = AE::timer 1, 1, sub {
my ($x) = @_;
AE::log fatal => "bullshit: %s", encode($x->data());
};
EV::run;
Надеюсь не надо пояснять почему так работает?
Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.
Пруф в студию или не было.
#!/usr/bin/perl
use EV;
use AnyEvent;
my $cv = AE::cv;
my $t = AE::timer 1, 1, sub {
AE::log error => "ales good";
};
my $t = AE::timer 1, 1, sub {
AE::log error => "bullshit 2", $cv->recv();
};
EV::run;
Кроме того нельзя использовать die() внутри колбэка, поскольку
нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.
4.2
#!/usr/bin/perl
use strict;
use warnings;
use EV;
use AnyEvent;
$EV::DIED = sub {
AE::log fatal => "$@";
};
my $t = AE::timer 1, 1, sub {
die "bullshit 3";
};
EV::run;