如何知道线程是否执行完毕?(10分)

  • 主题发起人 主题发起人 qiuyan81
  • 开始时间 开始时间
Q

qiuyan81

Unregistered / Unconfirmed
GUEST, unregistred user!
我用多线程对数据库进行操作
如何知道某个线程是否操作完毕呢?
以前太大用了 把分都花光了 请各位多多指教,谢了!
 
可以设一全局变量.线程开始运行时置为true.
在线程的execute过程开始写上FreeOnTerminate:=true;在过程最后将变量置为false.
方法可能很土,但还管用.
 
FEvent:=TSimpleEvent.Create;
Thread开始前
FEvent.Reset;
THread结束后
FEvent.finish;
---------
waitforsingobject(FEvent)
 
直接设置一个函数指定到线程的OnTerminate事件
with TDoThread.Create(true)do
begin
OnTerminate := Self.ThreadTerminate;
InterlockedIncrement(FThreadCount);
Resume;
end;

procedure TfrmMain.ThreadTerminate(Sender: TObject);
var
i: Integer;
begin
//线程结束处理事件
FLock.Enter;
try
i := FThreadMagList.IndexOf(Sender);
if i >= 0 then
FThreadMagList.Delete(i);
InterlockedDecrement(FThreadCount);
if FThreadCount = 0 then
begin
btnStart.Enabled := True;
ShowState('服务已停止!');
end;
finally
FLock.Leave;
end;
end;
 
晚起的小虫的方法最正宗
但是实际使用时,我一般只加一个标志就可以了
 
接受答案了.
 
后退
顶部