Главная страница
    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.47 MB
Время: 0.011 c
15-1158053969
WELLiON
2006-09-12 13:39
2006.10.01
Печать в PDF.


15-1157699105
hhhhh
2006-09-08 11:05
2006.10.01
Как будет грамотнее?


2-1158236112
Crazy monkey
2006-09-14 16:15
2006.10.01
Можно ли в Listbox вставить картинку?


1-1155801487
lex67
2006-08-17 11:58
2006.10.01
Как сделать паузу


2-1157726008
gear
2006-09-08 18:33
2006.10.01
отловить выпадение Access Violation...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский