![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FTP-клиент [D7, NT4, Win2k, WinXP]
Дмитрий Ботвин © (2004-10-14 09:20:00)Всем привет! У меня прога, которая показывает видеоклипы и
графические файлы на форме и параллельно в отдельном потоке с
заданного ftp-сервера подкачивает новые файлы. Сам ftp-клиент
написан на IdFTP. Проблема в том, что если канал до ftp-сервера
узкий то подкачка новых файлов происходит крайне медленно и при
этом демонстрация файлов подтормаживает. Приоритет потоку с ftp-
клиентом ставил разный - не помогло. Подскажите что делать?
Дмитрий Ботвин (2004-10-14 11:48:00) [1]Reindeer Moss Eater спасибо, щас попробую!!!
Reindeer Moss Eater (2004-10-14 11:45:00) [2]И как увеличение размера
буфера влияет на работу FTP?
Никак не влияет.
Размер влияет на работу плеера.
Дмитрий Ботвин (2004-10-14 11:40:00) [3]Да я его нашел - он равен 32кб. Как думаете скока ему поставить
то надо? Какой предел, если он есть? И как увеличение размера
буфера влияет на работу FTP?
Reindeer Moss Eater (2004-10-14 11:36:00) [4]Проигрыватель проигрывает скачиваемый файл из буфера.
В буфер качает фтп клиент.
Если проигрыватель "сосет" из буфера икс килобайт в секунду (битрейт фильма), а канал позволяет пополнять буфер со скоростью игрек килобайт в секунду, и икс > игрек то никакими приоритетами скачивающего потока дело не улучшить.
Только увеличивать буфер.
А как увеличить размер буфера???
Сначала поискать его реализацию в программе.
Дмитрий Ботвин (2004-10-14 10:52:00) [5]Вот сам модуль скачки:
procedure FTPThread.DownloadFiles;
var Name, ext: String;
LS: TStringList;
i: integer;
begin
//Подключаемся
Form1.IdFTP1.Username := Form1.User.Text;
Form1.IdFTP1.Password := Form1.Pswd.Text;
Form1.IdFTP1.Host := Form1.Server.Text;
Form1.IdFTP1.Passive :=true;
try
Form1.IdFTP1.Connect;
except
exit;
end;
LS := TStringList.Create;
Form1.IdFTP1.ChangeDir(Trim(Form1.CurDir.Text));
Form1.IdFTP1.TransferType := ftASCII;
Form1.IdFTP1.List(LS);
if LS.Count=0 then
begin
LS.Free;
Form1.IdFTP1.Quit;
exit;
end;
Form1.IdFTP1.TransferType := ftBinary;
for i:=0 to LS.Count-1 do
begin
if not(Form1.IdFTP1.Connected) then
begin
LS.Free;
exit;
end;
if not(Form1.IdFTP1.DirectoryListing.Items[i].ItemType = ditFile) then continue;
Name := Form1.IdFTP1.DirectoryListing.Items[i].FileName;
if Name[1]='~' then continue;
//Проверяем, нет ли уже такого файла
if FileExists(Form1.PathAVI.Text+'\'+Name) then continue;
//Проверяем, нужен ли режим докачки
if FileExists(Form1.PathAVI.Text+'\~'+Name) then
//Докачка файла
try
Form1.IdFTP1.Get(Name, Form1.PathAVI.Text+'\~'+Name, false, true);
except
//Не докачали
continue;
end
else
try
Form1.IdFTP1.Get(Name, Form1.PathAVI.Text+'\~'+Name, false);
except
//Не скачали
continue;
end;
//Скаченный файл нужно переименовать
RenameFile(Form1.PathAVI.Text+'\~'+Name, Form1.PathAVI.Text+'\'+Name);
end;
LS.Free;
Form1.IdFTP1.Quit;
end;
А как увеличить размер буфера???
Reindeer Moss Eater (2004-10-14 10:01:00) [6]Подскажите что делать?
Увеличивать размер буфера. Больше ничего не поможет при тонком каналею
alecsoid (2004-10-14 09:59:00) [7]Скинь прогу, точнее сам блок скачки в отдельном потоке плиз!