关于安卓多线程的问题
delphi吧
全部回复
仅看楼主
level 8
ooooh_up 楼主
命令如下:
procedure TForm_main.Button_ssqClick(Sender: TObject);
begin
WaitAni.Enabled:=True; //等待动画启动
WaitAni.Visible:=True; //等待动画显示
//建立新线程
TThread.CreateAnonymousThread(
procedure
begin
with (Sender as TButton) do
Label_title.Text:=Text;
numbers.Execute; //Actionlist中的一个Action
getdata.Execute; //Actionlist中的一个Action
WaitAni.Visible:=False; //等待动画隐藏
WaitAni.Enabled:=False; //等待动画结束
end).Start;
end;
现在的问题就是线程启动后程序会闪退,貎似是线程Actionlist中的Action不分先后运行了。
改在不用线程,动画无法显示:
procedure TForm_main.Button_ssqClick(Sender: TObject);
begin
WaitAni.Enabled:=True;
WaitAni.Visible:=True;
Application.ProcessMessages;
with (Sender as TButton) do
Label_title.Text:=Text;
numbers.Execute;
getdata.Execute;
WaitAni.Visible:=False;
WaitAni.Enabled:=False;
end;
2016年01月05日 01点01分 1
level 12
用TTask.Run();试试?
2016年01月05日 02点01分 2
不行啊,TTask两个Action还是不分先后运行,导致和TThread一样闪退。必须numbers运行后,getdata才运行,这样程序就正常。问题是两个Action一放到线程中就出错,不放动画又不显示。
2016年01月05日 07点01分
level 8
ooooh_up 楼主
最后只能在所有循环中加上application.processmessages
2016年01月06日 03点01分 3
level 12
多线程和并行库本来就是为了同步执行才设计出来的.既然你所有都要按顺序执行,你还用多线程意义不大了吧.
实在要等待的话,就用TCriticalSection分步执行吧.
2016年01月06日 05点01分 4
我用多线程是为了运行费时命令时,有等待动画显示,如同win的沙漏。重点在于动画。
2016年01月06日 06点01分
这两个action并非要用同步的,而且一定不能同步:第一个动态添加控件,第二个为动态创建的控件导入数据。 numbers.Execute; getdata.Execute;
2016年01月06日 06点01分
1