==============动态创建/删除线程================(50分)

  • 主题发起人 主题发起人 luckystart
  • 开始时间 开始时间
L

luckystart

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我写的一段源码。大家一起看看,有没有不对的地方?
运行的时候好像不太稳定。线程创建/删除次数少的时候挺管用的。
次数多了,好像就会出问题了。
procedure TMyForm.createNewThread;
var MyThreadList:TList;
begin
MyThreadList:=ThreadList.lockList;
MyThreadList.Add(MyThread.Create);
MyThread(MyThreadList[MyThreadList.Count-1]).Priority:=tpIdle;
MyThread(MyThreadList[MyThreadList.Count-1]).FreeOnTerminate:=True;
MyThread(MyThreadList[MyThreadList.Count-1]).onTerminate:=onThTerminate;
MyThread(MyThreadList[MyThreadList.Count-1]).Resume;
ThreadList.UnlockList;
end;

procedure MyForm.OnThreadTerminate(Sender:Tobject);
var MyThreadList:TList;
begin
MyThreadList:=ThreadList.Locklist;
MyThreadList.remove(sender);
ThreadList.unLockList;
end;
 
不好意思,源码里有几处粗心错误。^_^
看的时候应该能看懂,
编译肯定要出错了。hehe
 
你那报的错误是什么? 还有就是MyThread.Execute执行了什么操作?
 
我觉得主要问题出在free上。
线程结束后,没有即时得把它free掉,
所以就出了问题。
大家觉得呢?
 
我认为:应该没有问题吧。
》》好像不太稳定 和 好像就会出问题 :
请说具体点,会报错吗?结果不对?出错信息?出错几率?是谁报的错?
另:线程创建时是挂起的吗?你有继承THREAD的CREATE方法吗?
//constructor TThread.Create(CreateSuspended: Boolean);
还有:在ADD和REMOVE时不需要写LockList和UnLockList,因为TThreadList本身在ADD和
REMOVE时会自动LOCK和UNLOCK。不过写上去也不会出问题。
 
To Huzz:
我继承了Create,
线程创建时是挂起的。
非常感谢你的帮助。
BTW:可以告诉我你的Email或者QQ吗?
 
Email:huzzz@163.com
QQ:70517925(很少上,抱歉)
 
在EXCUTE里加FreeOnTerminate := True;
 
不会吧?
在execute里再加freeonterminate:=true是什么意思呀?
线程创建的时候不是已经申明过了吗?
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部