YAzla
Зарегистрирован: 05.09.2005 Сообщения: 4
|
Добавлено: Пн Сен 05 2005 01:16 Заголовок сообщения: Фтп клиент виснит... |
|
|
Я написал Фтп клиент при помощи компонента IdFtp, при подключении и пересылке файлов прога зависает и развисает только после окончания загрузки. Анти фрииз не совсем помогает, я создаю IdFtp компонент IdFtp в потоке и все действия тоже в потоке но прога всё равно висит. Подскажите пожалуйста как это исправить, вот код потока:
Код: |
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdTCPConnection, IdTCPClient, IdBaseComponent, IdComponent,
IdUDPBase, IdUDPClient, IdTrivialFTP, StdCtrls, idftp , ComCtrls,QFileCtrls,IdException;
type
Load = class(TThread)
private
idftp: TIdFTP;
FMainHandle:HWND;
procedure upload();
{ Private declarations }
protected
procedure Execute; override;
public
constructor Create(AHost: string; APort: integer; AHandle: THandle);
virtual;
destructor Destroy; override;
end;
implementation
uses Unit1;
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure Load.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ Load }
constructor load.Create(AHost: string; APort: integer; AHandle: THandle);
begin
inherited Create(false);
FreeOnTerminate := false;
idftp := TIdftp.Create(nil);
idftp.Host := AHost;
idftp.Port := APort;
IdFTP.Username:=user;
IdFTP.Password:=pas;
FMainHandle:= AHandle;
end;
destructor load.Destroy;
begin
inherited Destroy;
end;
procedure load.upload();
var chek, chek1:string;
begin
ReturnValue:=0;
idftp.Create(nil);
form1.Label2.Caption:='Çàãðóçêà:';
chek:=form1.list.items.strings[i];
chek1:=remdir+'/'+ExtractFileName(form1.list.items.strings[i]);
//try
if not DirectoryExists(locdir+form1.list.items.strings[i]) then
begin
idFTP.Put(form1.list.items.Strings[i],remdir+'/'+ExtractFileName(form1.list.items.strings[i]),false);
//except EIdProtocolReplyError do
form1.ListBox1.Items.Add(form1.list.items.strings[i]);
end
else
begin
idFTP.MakeDir(remdir+'/'+form1.list.items.strings[i]);
idFTP.ChangeDir(remdir+'/'+form1.list.items.strings[i]);
remdir:=remdir+'/'+form1.list.items.strings[i];
end;
ReturnValue:=1;
end;
procedure Load.Execute;
begin
IdFTP.Connect;
if IdFTP.Connected then form1.Label1.Caption:='Ïîäêëþ÷åíî';
IdFTP.ChangeDir(remdir);
repeat
upload;
i:=i+1;
form1.ProgressBar1.Position:=i;
until i=form1.list.count;
idftp.Disconnect;
{ Place thread code here }
end;
end.
|
Кстати поток я запускаю так
Код: |
loading:=Load.Create(server,21,545);
sleep(100);
while loading.WaitFor=0 do
sleep(200);
|
Я пробывал уже много разных вариантов но ничего не выходит... |
|