Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: GUI > Tkx и threads


Автор: alezzz 9.11.2011, 15:47
Приделываю гуи к одной программе, без гуя все работало примерно так:
Код

    my @threads;
    while ($cont =~ m# чего-нибудь ">#g){
        my $p = $1;
        push @threads, threads->create(\&getfirm, $p);
    }
    foreach my $thread (@threads){
        $thread->join();
    }

sub getfirm{
    my $page = shift;

   обработка и просто выход из саба
}


На Tkx программа умирает и появляется ошибка (с предлождение отправить отчет) еще перед циклом, вызывающим $thread->join();, хотя я не пойму почему, если все правильно понимаю то create не запускает сами нити.
Переделал на:
Код

while ($cont =~ m#  ...   #g){
            my $p = $1;
            threads->new(\&getfirm, $p);
        }

но тут проблема:
Код

Perl exited with active threads:
    0 running and unjoined
    10 finished and unjoined
    0 running and detached

я так понял что мои нити повисли, хотя функция в них работающая обрабатывает все до конца. Пробовал по всякому: kill, exit, detach -- безрезультатно, обычно основная программа завершается видимо вместе с завершением дочернего процесса (если внутри функции для threads) либо ошибкой виндовс (да, кстати, это под виндовс) если вне функции.

как правильно завершить threads запущеный через threads->new?

Автор: alezzz 9.11.2011, 16:06
на perlmonks накнулся на статью, где пишут что threads нужно запускать до Tkx::MainLoop();

и как теперь быть?

Автор: alezzz 9.11.2011, 16:28
тему можно закрыть, отладка принтами вывела на место в коде, которое к threads отношения не имеет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)