procedure Delay(msecs:integer);
var
FirstTickCount:longint;
begin
FirstTickCount:=GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount-FirstTickCount) >= Longint(msecs));
end; procedure TForm1.Button4Click(Sender: TObject);
var
Params: TStrings;
t:TStringStream;
o:string;
i,k:Integer;
paralist:TStrings;
PostURL:String;
begin
try
kaiguan:=1;
while kaiguan>0 do
begin
idHTTP1:= TidHTTp.create(self);
idHTTP1.HandleRedirects := True;
Params := TStringList.Create;
t:=TStringStream.Create('');
idHTTP1.Request.CustomHeaders.Add('Referer: '+edit2.text);
idHTTP1.Request.CustomHeaders.Add('Accept: '+edit1.text);
idHTTP1.Request.CustomHeaders.Add('Accept-Encoding: '+edit4.text);
idHTTP1.Request.CustomHeaders.Add('User-Agent: '+edit5.text);
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
PostURL:=edit7.text;
IdHTTP1.post(PostURL,Params, t); //提交
o:=t.DataString;
o:=UTF8toANSI(o);
memo1.lines.add(trim(o));
IdHTTP1.Request.CustomHeaders.Clear;
ii:=ii+1;
label10.Caption:=inttostr(ii);
IdHTTP1.Free;
Params.Free;
t.Free;
delay(strtoint(edit8.text));
if kaiguan=1 then button4.Click;
end
except
on ex:exception do
begin
delay(5000);
button4.Click;
end
end;
end; procedure TForm1.memo1Change(Sender: TObject);
begin
if memo1.Lines.Count>50 then memo1.Lines.Delete(0);
end; 运行有几个小时后出现stack overflow错误窗口,然后自动退出了。实在是找不出错误所在,请教高手一下,谢谢!
var
FirstTickCount:longint;
begin
FirstTickCount:=GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount-FirstTickCount) >= Longint(msecs));
end; procedure TForm1.Button4Click(Sender: TObject);
var
Params: TStrings;
t:TStringStream;
o:string;
i,k:Integer;
paralist:TStrings;
PostURL:String;
begin
try
kaiguan:=1;
while kaiguan>0 do
begin
idHTTP1:= TidHTTp.create(self);
idHTTP1.HandleRedirects := True;
Params := TStringList.Create;
t:=TStringStream.Create('');
idHTTP1.Request.CustomHeaders.Add('Referer: '+edit2.text);
idHTTP1.Request.CustomHeaders.Add('Accept: '+edit1.text);
idHTTP1.Request.CustomHeaders.Add('Accept-Encoding: '+edit4.text);
idHTTP1.Request.CustomHeaders.Add('User-Agent: '+edit5.text);
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
PostURL:=edit7.text;
IdHTTP1.post(PostURL,Params, t); //提交
o:=t.DataString;
o:=UTF8toANSI(o);
memo1.lines.add(trim(o));
IdHTTP1.Request.CustomHeaders.Clear;
ii:=ii+1;
label10.Caption:=inttostr(ii);
IdHTTP1.Free;
Params.Free;
t.Free;
delay(strtoint(edit8.text));
if kaiguan=1 then button4.Click;
end
except
on ex:exception do
begin
delay(5000);
button4.Click;
end
end;
end; procedure TForm1.memo1Change(Sender: TObject);
begin
if memo1.Lines.Count>50 then memo1.Lines.Delete(0);
end; 运行有几个小时后出现stack overflow错误窗口,然后自动退出了。实在是找不出错误所在,请教高手一下,谢谢!
Params := TStringList.Create;
t:=TStringStream.Create('');
try
.......
finally
idHTTP1.free;
Params.free;
t.free;
end;
IdHTTP1.Free;
Params.Free;
t.Free;
在循环里面释放会溢出啊?如果我放在循环外再释放,循环次数多了会不会有影响?
// 對象的建立與釋放這樣來做。
try
Finallyend;
kaiguan 這個值的變化你是在IDHTTP下如何寫的??
不是釋放多了影響,堆上分配了回收了就可以,但頻繁不是好的方法。
而是 IDHTTP 這樣的POST,異常的次數太高了,這些對象的FREE你應該加在FINALLY裏
建立了就讓他正常的釋放,你上面的代碼,在POST後,如果出錯。就不能正常釋放了。
try
finally
end;
Except
end;
嵌套下不矛盾的。不過這點真不如C,JAVA做得好。