我怎樣才能正確地釋放組件,一旦我這樣做了一個循環?如果我像現在這樣釋放它,我會得到一些GETMEM.INC異常。我來自Indy,所以我不太瞭解ICS。ICS HTTPCLI免費例外
感謝
const
URLs : array[0..3] of string =
(
'http://www.example.com',
'http://www.example.com',
'http://www.example.com',
'http://www.example.com'
) ;
var
Output: array of TStringList;
S: array of TMemoryStream;
Async: array of TSslHttpCli;
implementation
procedure RequestDone(Sender: TObject; RqType: THttpRequest;
ErrCode: Word);
begin
with Sender as TSSLHTTPCLI do begin
S[Tag].Position:=0;
Output[Tag].LoadFromStream(S[Tag]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i := 0 to High(URLS) do begin
S[i]:=TMemoryStream.Create;
Output[i]:=TStringList.Create;
Async[i]:=TSslHttpCli.Create(nil);
Async[i].Tag:=i;
Async[i].FollowRelocation:=true;
Async[i].NoCache:=true;
Async[i].SocketFamily:=sfAny;
Async[i].OnRequestDone:=RequestDone;
Async[i].RcvdStream:=S[i];
Async[i].URL:= URLs[i];
Async[i].MultiThreaded:=true;
Async[i].GetASync;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i:integer;
begin
for i := 0 to High(URLS) do begin
Output[i].Free;
Async[i].RcvdStream.Free;
Async[i].Free; // << -- EXCEPTION
// S[i].Free;
end;
end;
爲什麼不使用'TList'來容納Http客戶端?你可以創建'TMemoryStream',例如'Async [i] .RcvdStream:= TMemoryStream.Create',並且你可以在'RequestDone'內部釋放'RcvdStream'而不需要並行數組。重新考慮你的代碼和變量名稱。一團糟。 – kobik
@kobik你爲什麼不把它作爲答案發布?很難理解你的意思。 –
你最初在Q中提供的鏈接中的[代碼示例](http://www.delphipages.com/forum/showthread.php?t=199517)確實很好。 – kobik