Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> threads, eval, KILL 
:(
    Опции темы
alezzz
Дата 11.9.2018, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



Код

use threads 'exit' => 'threads_only';

my @ths;
my $max = 10;
$| = 1;

foreach my $num (1..$max) {
    push @ths, threads->create(
        sub {
            my $num = shift;
            
            $SIG{'KILL'} = sub {
                print "catch kill for thread $num\n";
                threads->exit;
            };
            
            print "thread $num started\n";
            while(1) {
                if ($num % 2 == 0) {
                    eval {
                        my $line = readline(STDIN);
                    };
                }
                else {
                    sleep 1;
                }
            }
        },
        $num
    );
}

sleep 3;

foreach my $num (1..$max) {
    print "send kill to $num\n";
    $ths[$num-1]->kill('KILL');
}

print "end, wait 3 sec\n\n";

sleep 3;


такой вывод получается:
Код

thread 1 started
thread 2 started
thread 3 started
thread 4 started
thread 5 started
thread 6 started
thread 7 started
thread 8 started
thread 9 started
thread 10 started
send kill to 1
send kill to 2
send kill to 3
send kill to 4
send kill to 5
send kill to 6
send kill to 7
send kill to 8
send kill to 9
send kill to 10
end, wait 3 sec

catch kill for thread 7
catch kill for thread 9
catch kill for thread 1
catch kill for thread 3
catch kill for thread 5
Perl exited with active threads:
        5 running and unjoined
        5 finished and unjoined
        0 running and detached


как завершать такие потоки с подвисшим ожиданием данных в eval?
PM MAIL   Вверх
alezzz
Дата 11.9.2018, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



еще проверил, если без eval
Код

if ($num % 2 == 0) {
    my $line = readline(STDIN);
}

то результат такой-же
PM MAIL   Вверх
tishaishii
Дата 12.9.2018, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



А вопрос?
PM MAIL ICQ Skype   Вверх
alezzz
Дата 12.9.2018, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



в конце первого поста, повторю:
как завершать такие потоки с подвисшим ожиданием получения данных?
PM MAIL   Вверх
tishaishii
Дата 13.9.2018, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Лучше бы разобраться с "подвисанием".
Есть функция alarm. И можно перехватывать сигналы.
PM MAIL ICQ Skype   Вверх
alezzz
Дата 13.9.2018, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



С подвисанием никак не разобраться, это эмуляция одного скрипта принимающего udp. Можно решить через IO::Select, но тогда ресурсов cpu уходит почти в 2 раза больше.

alarm пробовал, но что-то не получилось, приму в дар мой пример с рабочим алармом  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1190 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.