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

Вниз

FTP   Найти похожие ветки 

 
Tonich ©   (2005-10-11 15:33) [0]

Переформулирую свой прошлый вопрос.
Как мне определить что файл принят на сервере и отправлять следующий.

отправляю client.Put(...)
вот если бы типа что-то аналога WaitForSingleObject()


 
Ботвин Дмитрий   (2005-10-12 13:45) [1]

Используй TIdFTP - там все понятно изначально...


 
Tonich ©   (2005-10-12 14:04) [2]

так мой клиент именного этого класа - TIdFTP , но что-то...

там есть WaitFor но это не то что мне надо, насколько я понял..

ну подскажи если знаешь, а то  
> там все понятно изначально...
мало о чем говорит


 
Ботвин Дмитрий   (2005-10-12 15:37) [3]

Если Put не вызвала исключения - то файл закачен, иначе нет :-)))


 
Ботвин Дмитрий   (2005-10-12 15:41) [4]

Инди работает тока в блокирующем режиме, поэтому нет необходимости
ожидать какого-либо события. При возникновении любой ошибки во время
приёма/передачи возникает исключение.  Если файл принят/передан успешно исключения не возникает.


 
Tonich ©   (2005-10-12 15:42) [5]


> Ботвин Дмитрий   (12.10.05 15:37) [3]
)))) как у тебя все просто слушай )))


 
Tonich ©   (2005-10-12 15:46) [6]


> Ботвин Дмитрий   (12.10.05 15:41) [4]

хорошо, почему тохда если передавать N файлов в цикле приложение иногда просто виснит и все...
тоесть я так полагаю что происходит  новый Put в то время как еще сервер необработал старый так? или ....?


 
Ботвин Дмитрий   (2005-10-12 15:47) [7]

Tonich ©   (12.10.05 15:42) [5]

А ты предпочитаешь усложнить ситуацию? Инди для этого и разрабатывали,
что бы использовать все достоинства блокирующего режима, а если добавишь в приложение TIdAntiFreeze, то избавишься от единственного недостатка блокирующего режима - замораживания юзерского интерфеса
на время работы  блокирующих функций:-))


 
Tonich ©   (2005-10-12 15:50) [8]


> Tonich ©   (12.10.05 15:46) [6]

вот это-то меня и интересует, а точнее его решение...


 
Ботвин Дмитрий   (2005-10-12 15:54) [9]

Решения два:

1. Самый правильный - выносить код передачи данных (блокирующие функции) в отдельный кодовый поток.

2. Добавить на форму компонент TIdAntiFreeze - он сам всё устроит как надо, то бишь позволит обрабатывать пользовательские сообщения, т.е.
как ты говоришь "подвисать" интерфейс не будет.


 
Tonich ©   (2005-10-12 16:01) [10]

за  TIdAntiFreeze  пасибо незнал, он действительно обрабатывает пользовательские сообщения )) Но!!
Но, отправка файлов как зависала на N файле , так и зависает..

а вот я ставил в цикле sleep(...) ну application.proce... тохда все нормально выполнялось вот!

в поток я уже раньше пробовал он вообще нифига не отправлял что-то , может что-то накрутил , ща еще раз попробую


 
Tonich ©   (2005-10-12 16:04) [11]

я вот тут думаю может так сделать (оцени :)) )

у клиента ж есть событие TFClient.IdFTPClientStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: String);

где AStatus принимает одно из значений, а именно ftpReady так я думаю, может просто отслеживать его итолько когда оно приходит отправлять другой файл? а? как считаешь?


 
Ботвин Дмитрий   (2005-10-12 16:06) [12]

Sleep и ProcessMessages  - тут вообще ни причём, у тебя в алгоритме косяк.
На сайте http://www.nevrona.com/indy есть пример фтп-клиента/сервера.
Скачай и посмотри, там всё понятно.


 
Tonich ©   (2005-10-12 16:09) [13]

да в том то и дело что смотрел я уже не один алгоритм там везде отправляю или забирают по одному файлу... а по одному и уменя все отлично получается (

Да на этом сайте я тоже смотрел я от туда слил и хел и все демки, но всеравно спасибо, ты вообще первый кто . хоть что-то сказал )) по этому поводу, а еще раздел блин сети называется ......... )


 
Ботвин Дмитрий   (2005-10-12 16:10) [14]

Tonich ©   (12.10.05 16:04) [11]

Это всё лишнее. У меня целый проект построен на TIdFTP u TIdFTPServer.
При этом у меня клиентская сторона передаёт по нескольку десятков файлов, размеров от 50б до 80Мб. Я вынес блокирующие функции в отдельный поток с прогрессором и никаких событий вообще не отслеживаю
на серваке. События как токовые в инди только в информационных целях
используются. Не выдумывай себе гемороя :-)))


 
Ботвин Дмитрий   (2005-10-12 16:11) [15]

Tonich ©   (12.10.05 16:04) [11]

Это всё лишнее. У меня целый проект построен на TIdFTP u TIdFTPServer.
При этом у меня клиентская сторона передаёт по нескольку десятков файлов, размеров от 50б до 80Мб. Я вынес блокирующие функции в отдельный поток с прогрессором и никаких событий вообще не отслеживаю
на серваке. События как токовые в инди только в информационных целях
используются. Не выдумывай себе гемороя :-)))


 
Tonich ©   (2005-10-12 16:15) [16]

бЛинн )))

дай кусок кода там где происходит отправка файлов.  а?


 
Ботвин Дмитрий   (2005-10-12 16:23) [17]

Завтра принесу, щас под рукой нет исходников :-)))


 
Tonich ©   (2005-10-12 16:25) [18]

ок )))


 
Tonich ©   (2005-10-13 12:24) [19]


> Ботвин Дмитрий   (12.10.05 16:23) [17]

ну если что я уже на месте, так что гуди ))))


 
Tonich ©   (2005-10-13 14:29) [20]


> Ботвин Дмитрий  

Сделал как ты советовал, ну всмысле запихдуть все в потом, и шо ты думаешь, заработало таки ))

Только вот почемуто , приоритет ните (треду, потоку) пришлось задать самый низкий, тохда все работае, инача же опять виснет

Так что если что всервно дай свой код посмотреть... если конечно не забыл принести....


 
Eraser ©   (2005-10-13 14:39) [21]


> Tonich ©   (13.10.05 14:29) [20]

Показывай свой код с циклом - найдём ошибку.


 
Tonich ©   (2005-10-13 14:47) [22]


 for ii :=0 to FileList.Count-1 do
         Client.Put(FileList.Strings[ii],ExtractFileName(FileList.Strings[ii]));

вот собственно он


 
Eraser ©   (2005-10-13 14:53) [23]


> Tonich ©   (13.10.05 14:47) [22]

Ну тут всё вроде впорядке...
Исключения не выскакивают? Просто подвисает?
Проблема скорее всего на стороне сервера.


 
Eraser ©   (2005-10-13 14:54) [24]


> Tonich ©  

Поэксперементируй со св-м TransferTimeout, поставь например 1000 и посмотри будут ли появляться ошибки (исключения).


 
Tonich ©   (2005-10-13 15:02) [25]

в том то и дело что никаких исключений просто виснит и все (

ща попробую с TransferTimeout



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

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

Наверх




Память: 0.53 MB
Время: 0.033 c
4-1131705864
Eraser
2005-11-11 13:44
2006.01.22
Разрешения в winNT/2K/XP


1-1134675805
Volf_555
2005-12-15 22:43
2006.01.22
Как корректно выделить все функции и процедуры из *.pas файла?


11-1117182830
dvk
2005-05-27 12:33
2006.01.22
Stretch в TKolGraphicEx


1-1134635289
oleggar
2005-12-15 11:28
2006.01.22
C+Delphi


2-1136395219
maxim123
2006-01-04 20:20
2006.01.22
WinAPI проблема с type