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

Вниз

Для чего нужен компонет IdAntiFreeze?   Найти похожие ветки 

 
leonidus   (2004-03-15 20:40) [0]

Мастера прошу ногами не пинать, подскажите пожалуйста для чего нужен компонент из набора Indy IdAntiFreeze  и за что отвечает его свойство IdleTimeOut?
Заранее искренне благодарен.


 
Verg ©   (2004-03-15 22:38) [1]

Чтобы при операциях клиентских компонентов (напр., IdTcpClient и т.п.), которые могут заблокировать работу главного потока приложения, периодически вызывать Application.ProcessMessages. Период этот и будет равен тому самому свойству IdleTimeOut.
Получается, что польз. интерфейс "как бы не замерзает" на время выполнения этой операции.


 
S@shka ©   (2004-03-15 22:39) [2]

Сокеты Indy являются блокируемыми и поэтому возможно "подвисание" твоего приложение. Чтобы от этого уйти необходимо расположить на форме данный компонент.


 
leonidus   (2004-03-16 21:21) [3]

Спасибо за ответы. Я в принципе так и предполагал, выставил значение IdleTimeOut в 10 но программа при закачке потоками исаользуя IdHTTP все равно иногда подвисает - окно не прорисовывается. Можно это как-то вылечить?


 
nikkie ©   (2004-03-16 21:36) [4]

>при закачке потоками исаользуя IdHTTP
если основной поток не загружен, то зачем тогда IdAntiFreeze?


 
KyRo ©   (2004-03-17 03:25) [5]

Нужно ли подобное чудо использовать для WinSock ?


 
leonidus   (2004-03-17 18:29) [6]

>nikkie в каком смысле "основной поток не загружен" ? У меня программа в несколько потоков скачивает файлы из инета а потом скачанные файлы парсятся, так что думаю основной поток всегда при деле:) Но все равно подвисает, даже если я везде понатыкаю Application.ProcessMessages

>KyRo - не понял мысль, а что еще можно исользовать?


 
nikkie ©   (2004-03-17 18:42) [7]

>leonidus
ну так а зачем загружать основной поток? оставь его для юзера, а скачивание и обработка - в дополнительных потоках. IdAntiFreeze - это решение для ленивых, для тех, кто не хочет потоки делать...

>KyRo
нет, не нужно поскольку
1. IdAntiFreeze работает только для инди
2. в WinSock есть асинхронные сокеты, а с ними разговор другой
3. если даже использовать WinSock в блокирующем режиме, то см.1, надо использовать потоки.


 
leonidus   (2004-03-18 18:56) [8]

Так я и использую потоки а IdAntiFreeze использую именно потому что в потоках работают именно компоненты Инди а именно IdHTTP. Может я и кривовато делаю, но я просто положил на форму 4 компонента IdHTTP для каждого организую свой поток и по таймеру слежу как только поток отработал передаю ему очередной URL из очереди. Но приложение периодически подвисает, что я делаю не так?


 
nikkie ©   (2004-03-18 20:02) [9]

>Но приложение периодически подвисает, что я делаю не так?
кто ж тебя знает... покажи код - как создаешь потоки, как проверяешь, что "поток отработал", как "передаешь ему очередной URL".


 
Digitman ©   (2004-03-19 09:10) [10]


> что я делаю не так?


наверно, метод synchronize() используешь там, где он как раз не нужен


 
leonidus   (2004-03-19 23:03) [11]

Может быть, потому что я все делал методом научного втыка. А как надо правильно использовать synchronize?



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
8-1071825862
Buffoon
2003-12-19 12:24
2004.04.11
FPS


3-1081923497
loger
2004-04-14 10:18
2004.04.11
D5-Access


14-1079270115
Nick-From
2004-03-14 16:15
2004.04.11
Криминал


6-1075796204
frost
2004-02-03 11:16
2004.04.11
API для вычисления маски сети.


14-1082333245
Dudao
2004-04-19 04:07
2004.04.11
Delphi 8 VCL form application