ftp的多线程下载问题!!(很急,各位兄弟帮帮忙)(100分)

  • 主题发起人 主题发起人 pzh509
  • 开始时间 开始时间
P

pzh509

Unregistered / Unconfirmed
GUEST, unregistred user!
整个程序是这样的:在主窗口中有一个button按钮,两个edit文本框(用于输入ftp服务器
里要下载的文件名),
当按下button按钮后,创建两个线程使它们同时下载(采用IDFTP组件)
线程的整个代码如下:
unit Unit2;

interface

uses
Classes,IdFTP,Dialogs,StdCtrls;

type
dlthread = class(TThread)
private
{ Private declarations }
myidftp:tidftp;
mysavedialog:tsavedialog;
myedit:tedit;
protected
procedure Execute; override;
procedure download;//下载
public
constructor create(idftp:tidftp;savedialog:tsavedialog;aedit:tedit);
end;

implementation

constructor dlthread.create(idftp:tidftp;savedialog:tsavedialog;aedit:tedit);
begin
inherited create(false);
myidftp:=idftp;
mysavedialog:=savedialog;
myedit:=aedit;
freeonterminate:=true;//线程运行结束后,使线程自动释放本身的资源
end;

procedure dlthread.download;
begin
if mysavedialog.Execute then
begin
myidftp.TransferType:=ftbinary;//下载模式
myidftp.Get(myedit.Text,mysavedialog.FileName,true);//开始下载,mysavedialog.FileName存放 //的是下载到客户端的文件名
end;
end;

procedure dlthread.Execute;
begin
{ Place thread code here }
synchronize(download);
if terminated then
exit;
end;

end.
主窗口的主要代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var:
threadrunning:integer;//标识正在运行的线程数目
mydownthread1:dlthread;
mydownthread2:dlthread;
begin
threadrunning:=2;
mydownthread1:=dlthread.create(idftp1,savedialog1,edit1);
mydownthread1.OnTerminate:=threaddone;
mydownthread2:=dlthread.create(idftp1,savedialog2,edit2);
mydownthread2.OnTerminate:=threaddone;
end;

procedure TForm1.threaddone(sender:tobject);
begin
dec(threadrunning);
end;
但为什么它们不会同时下载?(运行结果是:等到第一个下载完后再接着下载另一个,
而实际上synchronize()函数是可以使线程同步执行的啊!)该怎么解决??
还有一个问题是:采用IDftp组件怎样做到断点传输??
 
synchronize就是会导致不能同时下载阿,看看他的说明阿。
 
那用什么才可以做到同时下载???
 
你这里没有必要用到synchronize,你的myidftp应该动态创建,而不是传入,这样才可能
同时下载。

我看了一下,InFtp好象自己没有实现断点继传,但是可以用流的方式下载,你自己指定
流的位置就可以了。
 
同意楼上的意见,总之,你可以这样做:把下载的代码在线程单元里实现,myfidftp
动态创建,每当用户点击下载时,就在线程实现代码那里重新登陆。这样才可能
实现同时下载
 
多人接受答案了。
 
你好!能把你的这个ftp的多线程下载源代码发给我看一下吗
我按你上面给的也做不出来
kogood@yeah.net
 
能也给我发一份多线程下载的源代码吗
还有想做有一个IDFTP的FTP服务匿名扫描 当多线程myidftp.create建立的时候 会有错误
怎么办啊
 
to chenzhou:
你的E_MAIL 是多少?
我发给你看看,(不过不知道对你有没有作用)
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
后退
顶部