请问如何等待一个线程的结束再继续往下执行代码,内祥...(100分)

  • 主题发起人 主题发起人 jxgxy
  • 开始时间 开始时间
J

jxgxy

Unregistered / Unconfirmed
GUEST, unregistred user!
这个是线程内的代码:
procedure GetListFile.Execute;
begin
Url(GameList,TempList);
end;

下面是调用部分:
procedure TForm1.FormCreate(Sender: TObject);
begin
GetListFile.Create(False);
//等待GetListFile.Create(False);执行完了再执行下面的,有办法吗?
...
DoSomething;
...
end;
 
waitforsingleobject 等等函数即可.也可以等待消息通知.怎样都行.
 
简单的办法是线程带返回值或由线程写一个结束标志。不过既然这样还要用线程干嘛?
 
能给个具体代码吗?

我用线程主要的原因是在窗体启动时要下载一个文件,如果文件比较大的话窗体要等文件下载完才会显示出来,这样就会很久时间也不显示,想马上显示出窗体同时用线程来下载这个文件.
 
我一般是在线程的OnTerminate事件里通知窗体~~~~
type ISubject=interface(iinterface)
[...GUID....]
procedure NotifyForm;
end;

type IObs=interface(iinterface)
[...GUID....]
procedure UpdateSelf;
end;

type GetListFile=class(Tobject,ISubject)
...
...
end;

type Form1=class(TForm,IObs)
...
..
end;
实现:

constructor GetListFile.Create(ASuppended:boolean);
begin
....
self.OnTerminate:=MyOnTerminate;
....
end;

procedure GetListFile.MyOnTerminate(sender:Tobject);
begin
NotifyForm;
end;

procedure GetListFile.NotifyForm;
begin
(Form1 as iObs).updateSelf;
end;

觉得可以写成观察者模式(加个保存对象的列表)~~
 
To jxgxy
你现在的问题和你原本想达到的是相违背的吧? 你既然要让Form先显示出来,线程来做下载文件, 但你现在又想在Form创建时等线程做完了 再显示窗体?
如果只是想知道什么时候线程完成了下载文件,可以象LS说的那样做在线程的OnTerminate事件里就可以,但不是象你提的问题那样等待线程做完了再往下走
 
我的意思就是先显示窗体,同时启动线程进行下载.
 
to:linuxping

可以给一下具体代码吗?我刚学DELPHI,线程还是第一次接触,Tks.

总体意思就是form显示的同时启动线程下载一个文件,同时要等待文件下载完后才执行下面的代码.
 
已经给出代码框架,只需在Form1.updateSelf里写进线程结束所需要执行的代码即可~
 
后退
顶部