gpt4 book ai didi

ios - 使用多线程时如何消除延迟

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:34 24 4
gpt4 key购买 nike

引用:How to animate a spinner while performing a workload via threading

我正在使用适用于 iOS 的 Delphi xe5 应用程序。在执行 SQL 查询时,我有一个 TAniIndicator 旋转。我正在使用线程 - 具体代码,请参见上述文章。

一切正常,但是,当使用我在上一个问题中得到帮助的代码时,我注意到增加了延迟。在调试器下运行时,应用程序卡在两行之间:

Thread.DoTerminate;
Thread.FFinished := True;

在System.Classes单元的ThreadProc函数下

关于原因的任何线索?或者我可以做些什么来防止增加 5 秒的延迟?谢谢

更新对 TLama 的回复:

procedure TForm_Login.WorkIsDone(Sender : TObject);
begin
Form_Login.LoadSpinnerFrame.visible := False;
Form_Login.LoadSpinner.Visible := False;
Form_Login.LoadSpinner.Enabled := False;
Form_Login.btnLogin.Text := 'Logout';
Form_Login.btnLogin.Enabled := True;
if GoodLogin = 1 then
Main_Form.show;
end;

我的 onTerminate() 链接到上述过程。

最佳答案

TThread.DoTerminate() 调用 TThread.Synchronize() 以触发主线程中的 TThread.OnTerminate 事件处理程序。 TThread 然后被阻塞,直到主线程处理该请求 - 这不会立即发生,因为主线程必须首先检测和处理新消息 - 并且 OnTerminate 处理程序退出。只有这样,控制权才会返回给 TThread,这样它才能完成它的逻辑。因此,如果您在 DoTerminate() 中遇到 5 秒延迟,则意味着主线程需要 5 秒来检测和处理 Synchronize() 请求。

关于ios - 使用多线程时如何消除延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146814/

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