unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, RzEdit, Vcl.ExtCtrls,
RzPanel, RzButton, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdFTP, activex;
type
TThreadwork = class(TThread)
private
protected
procedure Execute; override;
public
hEvent: Cardinal;
constructor Create; overload;
procedure run;
end;
TForm1 = class(TForm)
RzBitBtn1: TRzBitBtn;
RzPanel1: TRzPanel;
RzMemo1: TRzMemo;
RzBitBtn2: TRzBitBtn;
IdFTP1: TIdFTP;
procedure RzBitBtn1Click(Sender: TObject);
procedure RzBitBtn2Click(Sender: TObject);
private
{ Private declarations }
aworkthread: TThreadwork;
bworkthread: TThreadwork;
cworkthread: TThreadwork;
dworkthread: TThreadwork;
eworkthread: TThreadwork;
public
{ Public declarations }
end;
var
Form1: TForm1;
worklist: TStringList;
implementation
{$R *.dfm}
procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
i: Integer;
begin
aworkthread := TThreadwork.Create;
bworkthread := TThreadwork.Create;
cworkthread := TThreadwork.Create;
dworkthread := TThreadwork.Create;
eworkthread := TThreadwork.Create;
worklist := TStringList.Create;
worklist.Add('111.tar.gz');
end;
procedure TForm1.RzBitBtn2Click(Sender: TObject);
begin
aworkthread.run;
bworkthread.run;
cworkthread.run;
dworkthread.run;
eworkthread.run;
end;
{ TThreadwork }
constructor TThreadwork.Create;
begin
inherited;
hEvent := CreateEvent(nil, True, False, nil);
FreeOnTerminate := True;
end;
procedure TThreadwork.Execute;
var
str: string;
idftp: TIdFTP;
begin
inherited;
CoInitialize(nil);
idftp := TIdFTP.Create;
IdFTP.Host := 'X.X.X.X';
IdFTP.Port := 21;
IdFTP.Username := 'fXXXt';
IdFTP.Password := 'XXXXX';
IdFTP.Connect;
IdFTP.ChangeDir('./rpt');
while not Self.Terminated do
begin
WaitForSingleObject(hEvent, INFINITE);
while worklist.Count > 0 do
begin
str := worklist[0];
worklist.Delete(0);
IdFTP.Get(str, 'c:\' + str, True, False);
end;
ResetEvent(hEvent);
end;
IdFTP.Disconnect;
idftp.Free;
CoUninitialize;
end;
procedure TThreadwork.run;
begin
SetEvent(hEvent);
end;
end.
有点线程池的意思
最新推荐文章于 2024-01-19 11:53:25 发布