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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Убить поток в паралельном потоке 
:(
    Опции темы
GShadrin
  Дата 3.10.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте.
Столкнулся с такой проблемой.
Хочу реализовать следующее:
Функция вызывает два потока, являющиеся разными функциями, которые работают параллельно.
Один из них заканчивает работу первым.  Тот кто закончил первый убивает второго потока.
Как это можно сделать?
Код

use threads;
sub Wait_time
{
    print "IN Wait_time\n";
    sleep 20;  
    #тут надо чем то убить другой поток
    print "VISPOLSIA\n";
        $disconnect=1;    
    close POP3_SOCK;    
    
}

sub Read_socket_line_theard
{
    print "in Read_sicket_line_theard\n";    
    $data=<POP3_SOCK>;
    #тут надо чем то убить другой поток
    if ($data eq '')
    {
        $disconnect=1;
    }
    
}



sub fun
{
    print "IN Read_socket_line\n";
    $disconnect=0;
    
    push @threads, threads->create(\&Wait_time);
    push @threads, threads->create(\&Read_socket_line_theard);
    print "abc\n";
    foreach my $thread (@threads) {
    
        $thread->join();
    }
    
    print "Status: $disconnect\n";
}




Это сообщение отредактировал(а) GShadrin - 3.10.2009, 18:47
PM MAIL   Вверх
b00
Дата 3.10.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне вот такая фигня пришла в голову:
Код

    @threads = threads->list;
    foreach (@threads){
        if ($$_ != ${threads->self}){
            $_->exit();
        }
    }

Со статусами выхода не разбирался... Надо документацию по threads читать.
PM MAIL WWW Jabber   Вверх
sir_nuf_nuf
Дата 4.10.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну вообщем да.

сделать shared скаляр - переменную
Код

my $terminate : shared;


потом один поток - убийца (с) - устанавливает ее в равной своему id.
Код

$terminate = threads->self();


и все проверяют
Код

if ($terminate && $terminate != threads->self) {
  return;  # или как там еще выйти из потока.
}



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


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

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


 




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


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

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