冻结 Indy HTTP。上AndroidDelphi11个内帖
Freezing Indy HTTP. Get on Android Delphi 11 inside thread
我最近从 Delph 10.2 迁移到 Delphi 11。
这段代码的基础是我在线程内定期从服务器获取 http。
myth := TThread.CreateAnonymousThread(
procedure
var IdHTTP1:TIdHTTP;
begin
...
...
IdHTTP1:=TIdHTTP.Create();
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0)
Gecko/20100101Firefox/12.0';
...
...
IdHTTP1.Get(Url,ResStm);
...
...
end);
myth.start
此代码 运行 在 Delphi 10.2 上没有任何冻结,但在 Delphi 11 上冻结此行 'IdHTTP1.Get(Url,ResStm);' 超过 5 秒。
用于更新表单内容的同步过程的错误位置是导致此冻结的原因。
TThread.Synchronize (TThread.CurrentThread,procedure ()
begin
....
...
...
end);
通过限制这个包围结构到一些必要的行,冻结限制到
毫秒,这并不明显。
例如:我将流的解压缩放在同步之外。
最后提一下:这次冻结发生在Delphi 11
我最近从 Delph 10.2 迁移到 Delphi 11。 这段代码的基础是我在线程内定期从服务器获取 http。
myth := TThread.CreateAnonymousThread(
procedure
var IdHTTP1:TIdHTTP;
begin
...
...
IdHTTP1:=TIdHTTP.Create();
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0)
Gecko/20100101Firefox/12.0';
...
...
IdHTTP1.Get(Url,ResStm);
...
...
end);
myth.start
此代码 运行 在 Delphi 10.2 上没有任何冻结,但在 Delphi 11 上冻结此行 'IdHTTP1.Get(Url,ResStm);' 超过 5 秒。
用于更新表单内容的同步过程的错误位置是导致此冻结的原因。
TThread.Synchronize (TThread.CurrentThread,procedure ()
begin
....
...
...
end);
通过限制这个包围结构到一些必要的行,冻结限制到 毫秒,这并不明显。 例如:我将流的解压缩放在同步之外。
最后提一下:这次冻结发生在Delphi 11