Главная страница
    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.012 c
2-1158231796
susik
2006-09-14 15:03
2006.10.01
Delphi & MySQL. Всю плешь проел.


15-1157985150
Ломброзо
2006-09-11 18:32
2006.10.01
Ищу tool для Oracle


1-1156148868
DelphiLexx
2006-08-21 12:27
2006.10.01
Продвинутый PaintTo


2-1157802908
qoop
2006-09-09 15:55
2006.10.01
сортировка


3-1154078776
rsa_
2006-07-28 13:26
2006.10.01
программа не запускаеться на другой машине.





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