请教:停止线程的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 流浪鸟
  • 开始时间 开始时间

流浪鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在程序中怎么手动停止并释放一个正在执行的线程,不是通过设置FreeOnTerminate:=True等线程执行完自动停止而是单击某个按钮使它停止并释放!不是挂起,是停止并释放!
请教大家!
 
请问在程序中怎么手动停止并释放一个正在执行的线程,不是通过设置FreeOnTerminate:=True等线程执行完自动停止而是单击某个按钮使它停止并释放!不是挂起,是停止并释放!
请教大家!
 
用事件,WaitForSingObject,手动重置这个事件event,让event激活。我也是新手,不懂,学习下
 
上面的说的对,就是采用waitforsingleobject来处理。因为在线程的execute里面,我们通常使用while not terminated这个循环语句,而在循环语句内部当收到这个事件的时候,就跳出循环,这样就结束了execute了。这和你设置freeonterminate为true没有关系,设置freeonterminate为true主要是为了在关闭线程的时候,不用手动去释放你动态创建的那些对象。如果不设置freeonterminate为true,那么你还必须继承destroy,在destroy里面手动释放你线程里面所创建的对象。推荐使用freeonterminate设置为true。
btw:对于多线程里面动态创建的对象,很多有经验的人建议在execute函数里面创建,然后接着在execute结束的之前手动释放,这样就更安全可靠了。
 
不错,在线程里所有等待的地方加上判断
需要结束线程时设置标志
 
TThread类中有2个过程:
Suspend;
Terminate;
第一个是挂起一个线程,第二个是设置Terminated属性为True,然后终止线程。
 
后退
顶部