Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.013 c
15-1158135522
QuickFinder
2006-09-13 12:18
2006.10.01
Audio -> MP3


15-1157918868
Alx2
2006-09-11 00:07
2006.10.01
Игорь Шевченко, поздравляю с юбилем!!!


15-1157786112
Копир
2006-09-09 11:15
2006.10.01
Исламизм как новый тоталитаризм


2-1157802111
Mr tray
2006-09-09 15:41
2006.10.01
хелп по стандартным командам коиандной строки


1-1155908985
VEZ
2006-08-18 17:49
2006.10.01
Отмена ввода в TTreeView.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский