请问如何改进----这个IDHttp的简单取网页的代码?
大虾帮看下,谢了
程序的主要功能是,每一段时间取得网页的代码一次,并放到Memo1里面。
请问:
1.为什么我测试时老老后面就报内存错误?
2.Timer的执行时间是5秒,是不是短了?会有影响吗?
3.那个IdAntiFreeze为什么Active后反而错误挺多?
4.如果,我要同时取多个网页要怎么改?请给个思路。
5.如何让程序不要那么多错误代码?
- Delphi(Pascal) code
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdAntiFreezeBase, IdAntiFreeze;type TMyDownLoad=class(TThread) protected procedure Execute;override; procedure Download;end; TForm1 = class(TForm)Edit1: TEdit;Timer1: TTimer;Button1: TButton;Memo1: TMemo;IdAntiFreeze1: TIdAntiFreeze;IdHTTP1: TIdHTTP;procedure Timer1Timer(Sender: TObject);procedure Button1Click(Sender: TObject); procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); procedure FormCreate(Sender: TObject);privatepublicend;varForm1: TForm1;i:Integer;implementation{$R *.dfm}procedure TMyDownLoad.Download;Var UnitName,PathName:String; IDHTTP: TIDHttp; htm:string;begin Inc(i); screen.Cursor:=crHourGlass; IDHTTP:= TIDHTTP.Create(nil); try //Form1.Memo1.Clear; htm:=IdHTTP.Get('http://www.163.com'); Form1.Memo1.Text:=htm; except showmessage( '网络出错未能下载完成! '); Exit; end; screen.Cursor:=crDefault; showmessage( '下载完成! ');end;procedure TMyDownLoad.Execute;begin inherited; Download;end; procedure TForm1.Timer1Timer(Sender: TObject);begin TMyDownLoad.Create(false); //多线程 Edit1.Text:=IntToStr(i); end;procedure TForm1.Button1Click(Sender: TObject);begin Timer1.Enabled:=true; end;procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);begin Application.ProcessMessages; end;procedure TForm1.FormCreate(Sender: TObject);begin i:=0;end;end.[解决办法]
上一次还没取完,下一次又进来了,
timer事件中,先 enable = false,下载完并处理完,然后再 enable=true
[解决办法]
IDHTTP创建后没有释放
- Delphi(Pascal) code
procedure TMyDownLoad.Download;Var UnitName,PathName:String; IDHTTP: TIDHttp; htm:string;begin Inc(i); screen.Cursor:=crHourGlass; IDHTTP:= TIDHTTP.Create(nil); try try //Form1.Memo1.Clear; htm:=IdHTTP.Get('http://www.163.com'); Form1.Memo1.Text:=htm; except showmessage( '网络出错未能下载完成! '); Exit; end; finally IDHTTP.Free; end; screen.Cursor:=crDefault; showmessage( '下载完成! ');end;
[解决办法]