Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизThreads с ограниченным временем жизни. Найти похожие ветки
← →
gear (2006-08-18 20:42) [0]Требуется создавать на протяжении всей "жизни" программы потоки, работающие с сетью (качают инфу с сети обрабатывают и т.п.). Такие потоки создаются каждую минуту.
По истечении работы потока он умирает и освобождает свой стэк. Но не всегда, так как канал в сеть может быть "узким" и иногда закачки просто повисают или ещё какие-нибудь затыки. И соотвественно образуется куча зомби потоков.
Программа позволяет ограничиться временем жизни потока, но вопрос, как правильно создать такой поток с ограниченным временем жизни?
То есть необходимо, чтобы каждый поток жил не более 3 минут и умирал правильно освобождая память.
← →
Ketmar © (2006-08-18 20:50) [1]закачки никогда не "повисают". если так происходит -- у тебя неверный код.
← →
DiamondShark © (2006-08-18 21:46) [2]Формально может быть и верный, просто лениво написаный и потому дубовый.
← →
Ketmar © (2006-08-18 21:53) [3]ну да. в моём понятии такой код выпадает из определения "верный". %-)
← →
gear (2006-08-18 21:55) [4]Да вопрос не в этом. Пусть он там дубовый, хоть какой. Задача другая.
В понятие "зависают" входит не только отсутствие таймаутов, но и просто долгая закачка, которую надо прервать по истечении глобального времени жизни трэда. Там таких закачек много в цикле, но по истечении 3 минут трэд должен умереть и не важно какая иттерация цикла в этот момент идёт и что происходит.
← →
Ketmar © (2006-08-18 22:04) [5]> [4] gear (18.08.06 21:55)
проверяй периодически флажок Terminated, и выходи из процедуры потока, если флажок установлен. это удинственный корректный способ.
зыж да, я знаю, что Земля не круглая. (ц)
← →
Ketmar © (2006-08-18 22:04) [6]offtop:
елы-палы. что ж меня так с запятыми-то глючит?
← →
DiamondShark © (2006-08-18 22:39) [7]
> В понятие "зависают" входит не только отсутствие таймаутов
Т.е. таймауты-таки отсутствуют?
Тогда это как раз та самая задача. select перед блокирующими вызовами поможет.
> но и просто долгая закачка
А вот при наличии таймаутов ей просто неоткуда взяться.
← →
Kolan © (2006-08-18 23:16) [8]Кстати отработавшие потоки ИМХО личьше не удалять, а усыплять тк создание/удаление потоков - накладная операция...
← →
Ketmar © (2006-08-18 23:21) [9]> [8] Kolan © (18.08.06 23:16)
смотря для чего. иногда проще создавать заново (в плане кода). %-)
← →
gear (2006-08-19 01:49) [10]2 DiamondShark
>А вот при наличии таймаутов ей просто неоткуда взяться.
Нее, просто при дайлапе качается несколько мегабайт очень долго.
← →
isasa © (2006-08-19 08:39) [11]В потоке создай таймер на 3 минуты и, по срабатаванию, флаг Terminated:=true. Хотя, это зверство какое-то. А качать, строго, в асинхронном режиме.
Да, флаг Terminated проверять надо, периодически. :)
← →
Пусик © (2006-08-19 14:52) [12]>Автор
Создай список потоков и хранив нем время создания.
Периодически проверяй этот список на предмет зависших потоков и убивай их (TerminateThread + TThread.Free).
Конечно, это подойдет, если в потоках у тебя не выделяются ресурсы.
В противном случае утечки памяти приведут к полному краху.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.016 c