怎么在所有的线程都结束后,做其他的工作?(80分)

  • 主题发起人 主题发起人 天邪狼
  • 开始时间 开始时间

天邪狼

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟最近写了个程序,是从数据库中读出记录(很多),然后一个一个的去执行一项任务:(Update一下每条记录的状态),由于每执行一次速度慢,等所有的执行完,要等很久;所以我改成了多线程的了,就是把读出的记录分给3个线程同时去执行那个任务,这样时间就是原来的1/3了,但这样又出现新的问题了,就是我要在这3个线程都执行完后再去运行一个过程,由于我不知道怎么判断这3个线程都执行完了,所以我用了一个笨办法,就是直接把那个过程放在Thread.Execute里,这样每个线程都会把那个过程执行一下,也就是执行了3次,其实我想要的情况是在3个线程都结束后只要执行一次那个过程就行了,但不知道怎么处理,有哪位高手大侠知道的请帮帮我吧!
 
放一全局变量在三个线程里,当线程执行完时,把那变量值加上1,判断那个变量等于3时,就是三个线程都执行完了。
 
再请问一下weiliu,该在哪个地方判断那个变量?是不是用一个Timer让他每秒判断一次?还是在别的地方做这个判断?
 
const
THREAD_NUM = 3;
var
FSymbol: Integer = 0;
procedure AfterThreadTerminate(Sender: TObject)'
begin
Inc(FSymbol);
if FSymbol < THREAD_NUM then
Exit;
{ 你的操作 }
end;

只要你在每个线程创建语句后这样赋值就可以了,比如
Thread1 := TYourThread.Create(True);
Thread1.OnTerminate := AfterThreadTerminate;
 
按照我上面给你的例子
在线程结束的时候判断变量
要使用OnTerminate这个事件
 
看看这个
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3163408
 
读一下DELPHI5开发人员指南的,的多线程这一章很有用的。
 
我刚问完这个问题,就被经理拉去出差了,现在刚刚回来.不好意思,把这个问题拖久了,请大家原谅.现在问题解决了,还是散财吧! 天邪狼-----散财童子!
 
天邪狼-----散财童子!
 
后退
顶部