![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ftp-клиент, IdFTP [D6, 2000]
workbench © (2008-08-28 15:49:00)Программа клиент должна в течение дня скачивать с ftp и туда же закачивать достаточно большое кол-во файлов (порядка неск. тысяч в день). Предполагается что поддерживать соединение весь день она не будет, а будет запускаться каждые 10-15 минут. Какой конструкцией можно обеспечить "надёжное соединение" c ftp (например, нужно чтобы при разрыве соединения на закачке к.-л. файла прога вновь устанавливала соединение)? Пока ничего лучше не придумал иначе как перед каждым вызовом IdFTP.Get, Put, List и т.д проверять св-во IdFTP.Connected, то есть что-то типа того:
if not IdFTP.Connected then ConnectToFTP;
IdFTP.get(...);
но это наверно не совсем правильно...
Сергей М. (2008-08-29 10:26:00) [1]
> workbench (29.08.08 09:47) [5]
Отсюда и очевидное решение - создать доп.поток и вынести в него всю работу с IdFTP.
> поток который отсчитывает время и проверяет значение CPoint
Вот это как раз можно делать в осн.потоке.
workbench (2008-08-29 09:47:00) [2]
> Сергей М.
Поток основной (и единственный), а вот IdAntifreeze мне не поможет, ибо приложение консольное (окно не нужно) и объект Application соот-но не используется.
Ещё была вот такая мысль - сделать что-то вроде контрольных точек перед закачкой и после закачки файла:
CPoint := false;
IdFTP.Get(...);
CPoint := true
... и создать ещё один поток который отсчитывает время и проверяет значение CPoint, и при превышении интервала завершает процесс, это хотя бы поможет предотвратить описанную в [2] ситуацию (с зависанием n-го кол-ва экз-ов проги).
Сергей М. (2008-08-28 19:56:00) [3]
> прога "подвисает" на вызове IdFTP.Get(...)
Не трынди
"Подвисает" не "прога", а поток, в котором вызывается этот метод.
Если этот поток является основным, то шмякни на форму компонент TIdAntifreeze и донт ворри би хеппи.
Dennis I. Komarov (2008-08-28 17:50:00) [4]У меня есть служба каторая ежедневно передает туда сюда файлы по фтп
Раньше делал ее на Indy - не очень стабильно работает
На ICS - были проблемы - при вынесении логики передачи в dll большие файлы стали приходить с искажениями... (разбераться не стал)
Сейчас переделал все на "WinInet" - вроде пока без глюков...
workbench (2008-08-28 16:58:00) [5]
> Сергей М.
м... хотя бы потому что выглядит как-то не очень красиво, но если вы считаете что это вполне нормально, то я конечно не буду париться
может подскажете тогда ответ вот на какой вопрос: при использовании того же самого компонента (IdFTP), прога "подвисает" на вызове IdFTP.Get(...), причём сервер этот по истечении 3-х минутного периода (если не было запросов) клиента "отключает", так вот при таком зависании даже после 3-х минут продолжает висеть. Очень неприятная штука, если прога запускается порядка 30 разиков в день, то соот-но может возникнуть ситуация что на серваке будет висеть такое же кол-во заглохших процессов, может кто-нить сталкивался с подобным?
Сергей М. (2008-08-28 16:34:00) [6]
> это наверно не совсем правильно
Почему ?