Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
2-1158069501
A1ex
2006-09-12 17:58
2006.10.01
Как подключиться к базе...


15-1157814167
ArtemESC
2006-09-09 19:02
2006.10.01
Английский...


15-1157862068
так себе
2006-09-10 08:21
2006.10.01
С Днем танкиста! А есть ли среди нас танкисты?


3-1153948468
bumper
2006-07-27 01:14
2006.10.01
Где проблема с рус.кодировкой - в FB 1.5.3 или EhLib 3.6?


15-1158007687
Marser
2006-09-12 00:48
2006.10.01
Новый взгляд на Сашу Македонского :-)