如何在线程结束后执行代码? 有部分代码,要在线程结束后才能执行,但不知如何确定线程结束后再执行?如果在代码中直接ITHREAD.RESUME语句后写代码,程序就会在线程还没有执行完的情况下执行后面的代码了,请问高手如何解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在该线程中定义一个方法。然后 在execute的最后用Synchronize(该方法)调用这个方法。例:type TTestThread = class(TThread) protected procedure DoSth; procedure Execute;override; end;procedure TTestThread.DoSth;begin MainForm.Edit1.Text := '线程执行完毕';end;procedure TTestThread.Execute;begin // //线程工作 // Synchronize(DoSth);end; type TSec = class(TThread) private { Private declarations } protected procedure Execute; override; end; TForm1 = class(TForm) ... private procedure ThreadOnTerminate(Sender: TObject);...procedure TForm1.ThreadOnTerminate(Sender: TObject);begin //不能在这里面执行线程=nil的操作 MessageBox(Handle, '线程结束后要执行的代码', '提示', MB_OK + MB_ICONINFORMATION);end;{ TSec }procedure TSec.Execute;var i: Integer;begin FreeOnTerminate := True; OnTerminate := Form1.ThreadOnTerminate; for i := 0 to 2000 do Form1.Caption := IntToStr(i);end;... 那你就动态设置其它线程的OnTerminate := Form1.ThreadOnTerminate;试一下 转贴:等待线程结束如果要等待一个线程结束,可以这样做:在线程得私有变量中申明:FEvent:TSimpleEvent;published部分:property Event:TSimpleEvent read FEvent;Create中:FEvent:=TSimpleEvent.Create;Destroy中:FEvent.Free;在Execute中的第一行:FEvent.ResetEvent;在线程得结束(一般是最后一行代码)后添加:FEvent.SetEvent;然后在另外需要等待线程结束的地方把原来的WaitForSingleObject(AThread.Handle,????)改成WaitForSingleObject(AThread.Event.Handle)即可。 怎么不能给StringGrid.Rowcount赋初值为零? 取 wwdbgrid 里修改过的值 在线... DefaultExpression属性如何使用?? ReadFromStack 为何也报read timeout? 寻找控件? 请问在delphi中怎么写SQL语句创建数据库和数据表 实在是郁闷,散分 做了一个OCX控件,执行正常,可是在切换到其他窗口的时候会。。。 hi,朋友,这儿...关于TList的使用问题 向sql的语句传递参数的问题! 问问题 如何打开windows自带的计算器
例:
type
TTestThread = class(TThread)
protected
procedure DoSth;
procedure Execute;override;
end;procedure TTestThread.DoSth;
begin
MainForm.Edit1.Text := '线程执行完毕';
end;
procedure TTestThread.Execute;
begin
//
//线程工作
//
Synchronize(DoSth);
end;
TSec = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end; TForm1 = class(TForm)
...
private
procedure ThreadOnTerminate(Sender: TObject);
...procedure TForm1.ThreadOnTerminate(Sender: TObject);
begin
//不能在这里面执行线程=nil的操作
MessageBox(Handle, '线程结束后要执行的代码', '提示', MB_OK + MB_ICONINFORMATION);
end;{ TSec }procedure TSec.Execute;
var
i: Integer;
begin
FreeOnTerminate := True;
OnTerminate := Form1.ThreadOnTerminate;
for i := 0 to 2000 do
Form1.Caption := IntToStr(i);
end;
...
在线程得私有变量中申明:
FEvent:TSimpleEvent;
published部分:
property Event:TSimpleEvent read FEvent;Create中:
FEvent:=TSimpleEvent.Create;Destroy中:
FEvent.Free;在Execute中的第一行:
FEvent.ResetEvent;
在线程得结束(一般是最后一行代码)后添加:
FEvent.SetEvent;然后在另外需要等待线程结束的地方把原来的
WaitForSingleObject(AThread.Handle,????)改成WaitForSingleObject(AThread.Event.Handle)即可。