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


Автор: CiklodoL 17.8.2007, 02:29
Здравствуйте, у меня следующая проблема при многопоточности: при чтение из файла в цикле дескриптор файла выдаёт пустое значение, - как я понял IO не успевает за потоками и циклом в них, если файл загрузить в массив и потом снимать из него то всё нормально работает, но этот вариант не подходит из за размеров файла, собственно вопрос - как.. сделать чтобы чтение успевало за циклом

привожу сам саб многопоточности:
sub Thr
{
while ($a){
$p = <file>;
...тут идёт отправка запроса и считывание ответа...
}

Автор: shamber 17.8.2007, 07:28
сделать задержку?
 
Код

select(undef,undef,undef,0.1)

Автор: CiklodoL 17.8.2007, 13:42
если сделать задержку, то скорость упадёт...

Спасибо, я сам разобрался, сделал сначала заполнение массива частью данных из файла, затем когда массив опустевает он снова заполняется и потоки вновь запускаются

Автор: CiklodoL 24.8.2007, 13:10
Всем доброе время суток, у меня возник еще один вопрос: как убить поток?

привожу код: тут собственно создаются потоки, но когда подключится не удаётся, то вылетает Thread 13 terminated abnormally:.. вопрос - как корректно завершить поток в таком случае?

for( 0..$thr ) { $trl[$_] = threads->create( \&Flood, $_ ); }
for( 0..$thr ) { $trl[$_]->join; }

sub Flood
{
$sock = IO::Socket::INET->new(PeerAddr => $host,
                                  PeerPort => $port,
                                  Proto => 'tcp') || (а тут в случае если не удалось подключиться, то поток должен убиться)

... ... ....
}

поставил || return 0, ошибки не вылетают но при это потоки которые не смогли подключиться будут висеть в памяти.... ?

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