delphi WinInet 多线程获取网页代码内存不能释放

bjhmsoft_lhj 2015-06-04 09:42:48
获取网页部分


function DownloadWithInet(const AUrl: string): string;

procedure Add(Buf: PChar; Count: Integer);
var
Len: Integer;
begin
Len := Length(Result);
SetLength(Result, Len + Count);
Move(Buf^, Result[Len + 1], Count);
end;

function PrepareURL: string;
begin
Result := UpperCase(Copy(AUrl, 1, 7));
if Result <> 'HTTP://' then
Result := 'http://' + AUrl
else
Result := AUrl;
end;

var
BytesRead: DWORD;
Session, Connection: HINTERNET;
Buffer: array[1..1024] of Char;
i:Integer ;
s:string;
begin
Result := '';
if AUrl = '' then Exit;
Session := InternetOpen(nil, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
if not Assigned(Session) then
raise Exception.Create(SysErrorMessage(GetLastError));
try


Connection := InternetOpenUrl(Session, PChar(PrepareURL), nil, 0,
INTERNET_FLAG_RAW_DATA, {INTERNET_FLAG_RELOAD, }0);
if not Assigned(Connection) then
raise Exception.Create(SysErrorMessage(GetLastError));
try
repeat
FillChar(Buffer, SizeOf(Buffer), 0);
InternetReadFile(Connection, @Buffer, SizeOf(Buffer), BytesRead);
if BytesRead > 0 then
Add(@Buffer, BytesRead);
Application.ProcessMessages;
until BytesRead = 0;
finally
InternetCloseHandle(Connection);
end;

Application.ProcessMessages ;

finally
InternetCloseHandle(Session);

end;
end;



线程部分

constructor TQueryThread.Create( aurl1: String;
AIndex: Integer);
begin


inherited Create(false);
FreeOnTerminate:=True;
也写了字段释放
end;

可最后内存就是一直增加
...全文
279 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
orxor 2015-07-14
  • 打赏
  • 举报
回复
内存泄露不一定在下载线程里 或者你把返回的内容放到一个流里看看
ddlucky 2015-06-15
  • 打赏
  • 举报
回复
你获取下来的网页内容怎么处理的?
bjhmsoft_lhj 2015-06-05
  • 打赏
  • 举报
回复
没人知道吗????

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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