哈哈,解决了,大家共享:idHttp下载文件占资源多,机器像死机一样,包在线程里也不行,怎么办?

gselec 2005-03-21 11:30:43
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;
...全文
194 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunmingdong 2005-06-27
  • 打赏
  • 举报
回复
mark
sc_arhat 2005-04-25
  • 打赏
  • 举报
回复
楼主好样的,学习中
andrew223 2005-04-25
  • 打赏
  • 举报
回复
请问那还需要多线程处理吗?我也碰到这问题

829

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧