如何在使用多线程时摆脱延迟



参考: 如何在通过线程执行工作负载时对微调器进行动画处理

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

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

Thread.DoTerminate;
Thread.FFinished := True;

在 System.Classes Unit 的 ThreadProc 函数下

关于为什么的任何线索?或者我能做些什么来防止增加的 5 秒滞后?谢谢

更新回复:

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()中遇到 5s 滞后,那么这意味着主线程需要 5s 来检测和处理Synchronize()请求。

相关内容

  • 没有找到相关文章

最新更新