当 TidHTTP 在 GET 后等待服务器的响应并且线程被终止时,我遇到了一些与 TidHTTP 相关的内存泄漏。
示例:
aThread = class(TThread)
private
FidHTTP :TidHTTP;
FCommand :String;
public
procedure Execute(); override;
constructor Create(aCommand :String); override;
procedure Disconnect;
end;
procedure aThread.Execute();
var response :String;
begin
response := FidHTTP.Get(FCommand);
end;
procedure aThread.Disconnect;
begin
if ((FidHTTP <> nil) and (FidHTTP.Connected)) then FidHTTP.IOHandler.CloseGracefully;
end;
constructor aThread.Create(aCommand :String); override;
begin
FCommand := aCommand;
inherited Create;
end;
<小时/>
当应用程序关闭时,我用这个停止线程:
aThread.Disconnect;
aThread.Terminate;
aThread.Free;
我应该如何解决内存泄漏问题?
FastMM4 Log :
13 - 20 bytes: TIdThreadSafeInteger x 1
21 - 36 bytes: EAccessViolation x 1, TIdCriticalSection x 2
181 - 212 bytes: UnicodeString x 1
谢谢:)
最佳答案
你应该打电话
aThread.WaitFor;
在销毁线程之前。这可确保线程正确终止。销毁线程而不终止它可能会导致执行方法中的访问冲突,从而导致 FastMM 显示内存泄漏。
编辑考虑到问题可能是执行方法中的阻塞调用,您可能需要将 TIdHttp.ReadTimeOut 设置为合理的时间并定期检查线程终止情况。
关于delphi - 线程应用程序中的 Indy 错误!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518975/