Форум: "Сети";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c