gpt4 book ai didi

ios - 如何在通过线程执行工作负载时为微调器设置动画

转载 作者:行者123 更新时间:2023-11-29 10:54:12 25 4
gpt4 key购买 nike

我在 iOS 设备的 Delphi xe5 应用程序中使用多线程时遇到问题。我的目标是执行“一些工作”(SQL 查询),同时让 TAniIndicator 正在旋转。我试过使用 Applicaiton.ProcessMessages(),但如果有时完全旋转,这并不能使微调器顺利加载。

这是我当前的 btn.OnClick 代码

begin
if btnLogin.Text = 'Login' then begin
aThread := TMyThread.Create(True);
aThread.FreeOnTerminate := true;
aThread.Start;
while Mode1 = 0 do begin
Form_Login.LoadSpinnerFrame.visible := True;
Form_Login.LoadSpinner.Visible := True;
Form_Login.LoadSpinner.Enabled := True;
// Application.ProcessMessages;
end;
Form_Login.LoadSpinnerFrame.visible := False;
Form_Login.LoadSpinner.Visible := False;
Form_Login.LoadSpinner.Enabled := False;
btnLogin.Text := 'Logout';
aThread.Destroy;
end else begin
btnLogin.Text := 'Login';
end;

这是 thread.execute 方法的代码

procedure TMyThread.Execute;
begin
Form_login.mode1 := 0;
Sleep(5000);
Form_login.mode1 := 1;
end;

我现在可以始终让线程执行,但微调器从未显示。当微调器在工作负载期间设置动画时,我如何执行“一些工作”?

谢谢,使用 Delphi xe5 开发 iOS 应用程序。

更新:好的,所以使用 LU RD 的以下代码进行了更新......它有效,但是,我注意到增加了滞后。在调试器下运行时,应用程序卡在两行之间:

Thread.DoTerminate;
Thread.FFinished := True;

在System.Classes单元的ThreadProc函数下

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

最佳答案

在启动线程之前启用微调器。

为禁用微调器的线程定义一个 OnTerminate 方法。

在线程中完成您的工作,当线程准备就绪时,OnTerminate 会负责移除微调器。

注意:不需要显式释放线程,因为 FreeOnTerminate 为真。

begin
if btnLogin.Text = 'Login' then begin
Form_Login.LoadSpinnerFrame.visible := True;
Form_Login.LoadSpinner.Visible := True;
Form_Login.LoadSpinner.Enabled := True;
btnLogin.Enabled := False;
aThread := TMyThread.Create(True);
aThread.FreeOnTerminate := true;
aThread.OnTerminate := Self.WorkIsDone;
aThread.Start;
end
else begin
btnLogin.Text := 'Login';
end;

procedure TYourForm.WorkIsDone(Sender : TObject);
begin
Form_Login.LoadSpinnerFrame.visible := False;
Form_Login.LoadSpinner.Visible := False;
Form_Login.LoadSpinner.Enabled := False;
btnLogin.Text := 'Logout';
btnLogin.Enabled := True;
end;

procedure TMyThread.Execute;
begin
// Make your work
end;

这里重要的是程序流是事件驱动的。不需要轮询,轮询会耗尽 CPU 周期并使 GUI 无响应。

关于ios - 如何在通过线程执行工作负载时为微调器设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19141869/

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