Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > многопоточность, файл |
Автор: CiklodoL 17.8.2007, 02:29 |
Здравствуйте, у меня следующая проблема при многопоточности: при чтение из файла в цикле дескриптор файла выдаёт пустое значение, - как я понял IO не успевает за потоками и циклом в них, если файл загрузить в массив и потом снимать из него то всё нормально работает, но этот вариант не подходит из за размеров файла, собственно вопрос - как.. сделать чтобы чтение успевало за циклом привожу сам саб многопоточности: sub Thr { while ($a){ $p = <file>; ...тут идёт отправка запроса и считывание ответа... } |
Автор: shamber 17.8.2007, 07:28 | ||
сделать задержку?
|
Автор: 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, ошибки не вылетают но при это потоки которые не смогли подключиться будут висеть в памяти.... ? |