简单的动态多线程,搞了一夜,气死我了!(100分)

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

duncan98

Unregistered / Unconfirmed
GUEST, unregistred user!
我要实现这样一个目的:
动态地创建线程,任务完成后,自动销毁线程。
随时可以知道目前正在运行的线程的个数。
如果收到指令,则强行终止所有线程。
各位帮帮我设计一个思路吧。
 
我是这样想的:
在FORM里定义一个Tlist实例theList。
每次创建一个线程,都加入到theList里。
theList.add(myThread.create);
myThread(theList[theList.count-1]).priority:=tpIdle;
myThread(theList[theList.count-1]).freeOnTerminate:=True;
myThread(theList[theList.count-1]).Resume;
可是线程结束后, theList并没有把它 delete掉。
线程自己不能onTerminate的时候自动在theList里把自己删掉。
怎样才能在onTerminate的时候在theList里删掉?
或者大家还有其他更高明的思路?
 
设置ONTERMINATE事件
myThread(theList[theList.count-1]).onTerminate:=MyOnTerminate;
procedure xxx.myOnTerminate(sender:TObject);
begin
TheList:=ThreadList.LockList;
TheList.remove(Sender);
TheList.UnlockList;
end;

在多线层程序里
不要使用TLIST,而应该用TTHREADLIST替代
 
什么意思?
不用TList?
那你给的例子里怎么还是用了Tlist?
说得再详细一点好吗?

 
写错了,是
TheList:=ThreadList.LockList;
TheList.remove(Sender);
ThreadList.UnlockList;
你可以查看下TThreadList
它是线层安全的,添加和删除都使用locklist and unlocklist,LOCKLIST返回一个TLIST类型
TMPLST:=THREADLIST.LOCKLIST;
TMPLST.REMOVE / ADD
THREADLIST.UNLOCKLIST.
你可以查看下DELPHI的TTHREADLIST的帮助
 
你只要设置TThread的FreeOnTerminate属性为True,那么这个线程在结束后就自动删除这个
线程对象,不需要用什么List之类的东西。
 
wenyue是对的.
轿夫亲昵看清问题.
 
不好意思,我没看你的第二个贴子,呵呵
 
theList:=ThreadList.LockList;
....
ThreadList.UnlockList;
ThreadList是不是另外定义的TThreadList实例?
它的初值是怎么得到的?
theList:=ThreadList.LockList;
这个赋值是怎么进行的?
 
THREADLIST:TTHREADLIST;
//作为类成员
CREATE 里初始化:
THREADLIST:=TTHREADLIST.CREATE;
THELIST可以是中间的局部变量,
申明就是
VAR THELIST:TLIST;
begin
...
THELIST:=THREADLIST.LOCKLIST;
...
end;

 

Similar threads

后退
顶部