哈哈,解决了,大家共享:idHttp下载文件占资源多,机器像死机一样,包在线程里也不行,怎么办?
idHttp下载速度时,占资源很多,我放在线程里,线程也不动了,找到办法解决了:
在Indy有一个idAntiFreez组件,设他的Active为True,就解决了。
//下载线程对象的创建
Constructor _DLThread.Create(CreateSuspended:Boolean); //构造器,注意Create是静态方法,不能重载
Begin
Inherited Create(CreateSuspended);
//Suspended:=False;
fDownLoadURL:='';
fTargetFile:='';
End;
//下载线程对象的执行
Procedure _DLThread.Execute;
Var FS:TFileStream;
sInfo, sURL,sFile:String;
Begin
if Suspended then Begin
//Suspend;
Exit;
End;
sURL:=sDownLoadURL;
sFile:=sTargetFile;
//
if (sUrl='') or (sFile='') then Exit;
//
{With Frm_MDI do //,Frm_MDI.idHttp1
Try
sInfo:='下载文件['+sURL+']到['+sFile+']';
ShowInfo('开始'+sInfo+'... ...');
if FileExists(sFile) then DeleteFile(sFile);
//句柄属于线程 idHttp1:=tIDHttp.Create(Application);
//
Try
FS:=TFileStream.Create(sFile,fmCreate); //文件流
idHttp1.Get(sURL,FS); //下载
//
ShowInfo(sInfo+'完毕');
Except
On E:Exception do Begin
ShowInfo('[DownLoadHttpFile]'+sInfo+'失败'+#13+E.message);
ShowMessage('[DownLoadHttpFile]'+sInfo+'出错!'+#13+E.message);
End;
End;
//
Finally
If Assigned(FS) then FS.Free;
End;
}
//Suspended:=True;
End;
//设置下载URL
Procedure _DLThread.SetDownLoadURL(Value:String);
Begin
if fDownLoadURL=Value then Exit;
Terminate; //若下载URL变更,则终止
fDownLoadURL:=Value;
End;