gpt4 book ai didi

multithreading - 应用程序需要很长时间才能同步线程(或根本不同步)

转载 作者:行者123 更新时间:2023-12-03 14:35:55 25 4
gpt4 key购买 nike

我正在 Delphi XE5(iOS 和 Android)中使用 REST 组件。我目前正在通过 iOS 模拟器进行测试,我的应用程序经常卡在代码中的以下行:

R_Request.Execute;

经过一些调试,我发现它特别卡在 REST.Client.PAS 中的这行代码处:

HandleEvent(DoAfterExecute);

看起来像:

procedure TCustomRESTRequest.HandleEvent(AEventHandler: TMethod);
begin
// Handle Synchronized if we are NOT already in the main thread
// NEVER call synchronize on the MainThread - that might shift the island!
if SynchronizedEvents and (System.MainThreadID <> TThread.CurrentThread.ThreadID) then
TThread.Synchronize(TThread.CurrentThread, AEventHandler) // FAILS HERE
else
AEventHandler;
end;

它要么没有返回 .Synchronize 中的线程,要么花费了极长的时间(5 分钟左右)...它在调试时曾经工作过,但从那以后就不再工作了(30 分钟后,以及让它设置 5 分钟返回线程后)。

帮忙?或者至少任何人都可以给我任何方向感?

同样,针对 iOS 和 Android 进行开发(因此 FMX...),目前通过 iOS 模拟器进行测试。谢谢 !

最佳答案

问题是 FireMonkey 中的 TThread.Synchronize() 被破坏。请参阅此质量控制报告:

Report #123579: TThread.Synchronize() and TThread.Queue() do not work correctly in FireMonkey

这是最近才被发现的,但自从 FireMonkey 首次引入以来它就被破坏了,直到现在还没有人明显注意到。

在 Embarcadero 修复此问题之前,请尝试在主线程中定期调用 CheckSynchronize(),例如在计时器中。

关于multithreading - 应用程序需要很长时间才能同步线程(或根本不同步),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23070850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com