关于TList(TThreadList)类和TThread类的一些疑问

1.因为在同一个线程对象里,如果两次构造,将产生两个独立的线程,不但运行是独立的,而且使用线程的局部变量也是独立的、所以有下面的代码:(30分)
ThreadList为TList类型(下同)

Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
   tbLoop: Cardinal ;
   KeyLoop: Cardinal ;
   tb: string ;
   Html: string ;
   tbs:TStringList;
   newThread:TSearchTb;
begin
 
   for  tbLoop :=  0  to  lstManagement . Count -  1  do
   begin
     tb:=lstManagement . Items[tbLoop];
     newThread:=TSearchTb . Create( True );
     newThread . TbName:=tb;
     newThread . Html:=TbBasePath + tb;
     newThread . Finish:= False ;
     newThread . Resume; //开始执行
     ThreadList . Add(@newThread); //加入线程列表    
   end ;
   newThread:= nil ;


在这里、我的目的是创建出线程、我希望在这个过程结束时、线程并不结束、于是我就用一个TList对象来保存指针、
那么在这里、这个过程结束之前是否需要执行newThread.Free呢?

2.
有下面的函数、是将不需要的线程销毁掉(30分)
Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
   i: Integer ;
begin
   for  i :=  0  to  ThreadList. -  1  do
   begin
     if  TThread(ThreadList . Items[i]^).ClassNameIs( 'TSearchTb' then
     begin
       if  TSearchTb(ThreadList . Items[i]^).Finish  then
       begin
         TSearchTb(ThreadList . Items[i]^).Destroy; //销毁线程
         ThreadList . Delete(i); //从列表中移除
       end
       else
       begin
         TDeleteTb(ThreadList . Items[i]^).Destroy; //销毁线程
         ThreadList . Delete(i); //从列表中移除
       end ;
     end ;
   end ;
end ;

可是执行到if TThread(ThreadList.Items[i]^).ClassNameIs('TSearchTb') then这一句就出现了内存方法错误的提示、这又是什么原因呢?我保存在里面我确认一定TThread类的、

3.我发现有一个TThreadList类、同样可以把TThread对象放在里面、可是我却不知道怎么获得保存在TThreadList类中的对象属性了、(没有Items属性)、我需要根据线程内的一个属性才能判断这个线程是否可以销毁的(30分)

暂时就想到这些、如果对我的描述有不清楚的地方可以问我、如果你都能回答出来90分就是你一个人的了


TThreadList只是一个线程访问安全列表类,它本身的作用不是用来保存线程对象的。


一般情况下,当线程对象的execute被执行完成之后(或被中止),缺省情况下,线程对象本身就会被自动释放掉;即使不释放它,线程对象也不能够再次被execute,所以保存线程对象是没有意义的。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值