THREAD问题,请大虾们指点(50分)

  • 主题发起人 主题发起人 delphi_xs
  • 开始时间 开始时间
D

delphi_xs

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在窗体create的时候播放动画,同时建树,使用户不必守着屏幕等待,于是新建了一个
线程,在FormCreate过程中加入thread5:=Tm5_Thread.Create(false);但动画导入后不播放,要等树建好后动画才播放,用户才能操作。是不是我用线程的方法错误?怎么解决?
小弟刚学DELPHI,请各位指点一二。
 
给出你的程序流程,什麽时候播放动画,什麽时候创建线程?
 
我觉得是我的线程用得不对。
procedure TForm1.FormCreate(Sender: TObject);
var
x:string;
begin
swf_main.Movie := ExtractFilePath(Application.ExeName)+'/main/'+'main.swf';
thread5:=Tm5_Thread.Create(false);
end;
 
这样调有没有问题,问题应该在线程里边。
 
我是在打开工程文件后,NEW了一个thread object,名为Tm5_Thread,默认为unit 2,
procedure Tm5_Thread.Execute;
begin
Synchronize( CJ) ;
end;
procedure Tm5_Thread.CJ;
begin
//建树代码。
end;
 
这就对了,你把建树代码全放在Synchronize中,这样它是在主线程中执行的
所以动画不能播放了,这和不用线程效果一样
 
迷糊说的不错,另外你还要检查一下如果不建线程,动画能播放吗?
 
(吊线了)
to 迷糊
我也觉得和不用线程效果一样,指点我怎么做啊,多谢了。
 
把可能引起线程冲突的操作(比如对vcl控件操作)同步,其他操作(如后台运算)能不
同步就尽量不同步
 
to 迷糊
具体小弟不知道怎么做,刚接触线程技术,麻烦你说详细一点。
 
举一个简单的例子:
procedure Tm5_Thread.Execute;
var
i:integer;
begin
for i:=0 to 99do
begin

sleep(100);
Synchronize( CJ) ;
end;

end;
procedure Tm5_Thread.CJ;
begin
form1.listbox1.add('aaaaa');
end;

你可以把生成树结构的后台运算放在代替上面的sleep(100)
把更新树型控件的操作放在过程CJ中同步。
建议你线找本书看看吧
 
多谢了,小弟是赶时间才提问的。
分少,还望笑纳。
 
运行程序出错!!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
744
DelphiTeacher的专栏
D
后退
顶部