到底应该如何才能立即又安全退出线程? ( 积分: 60 )

  • 主题发起人 主题发起人 akphilip
  • 开始时间 开始时间
A

akphilip

Unregistered / Unconfirmed
GUEST, unregistred user!
现在程序中有一线程,用定时器设置成每隔5分钟自动执行一次,线程中主要是执行一批存储过程,有时候执行时间会比较长些,这样每次当我要退出主程序时,又刚好碰到线程正在执行,退出时就会出现内存报错。请问怎样才能迅速又安全的终止线程?
全文检索了大富翁里很多有关线程的,但发现好像说法很多,看了有点迷糊,哪位高手能不针对我目前这种情况具体实际指点下该怎么解决,谢谢。
我线程是用Create创建的,线程如下,里面要执行好几个存储过程
procedure TTran.Execute;
begin
{ Place thread code here }
try
DMConnection.DM.ADOLocal.close;
DMConnection.DM.ADOLocal.sql.Clear;
DMConnection.DM.ADOLocal.sql.Add('exec Uploadpro1');
DMConnection.DM.ADOLocal.execsql;
except
end;
|
|
还有几个类似的
|
|
end;
 
你不能等线程中的存储过程执行完了再退出吗?这样才能确保安全,但速度会慢些.要速度的话那肯定不安全,鱼与熊掌不能兼得.
Thread.Terminate;
//置Terminated为TRUE,让线程退出,但是你的好像在线程中没有循环执行,可以不用它
Thread.waitfor;
//等待线程执行完后退出.
Thread.free;
//直接释放,什么都不管.
根据需要,自己看着办.
 
建立一个全局变量(类似数组),线程创建的时候计入线程的地址,设置中断变量
线程结束的时候清除该地址(注意同步)。
整个程序退出的时候检查全局变量中是否有地址,如果需要直接退出,可将中断变量设置为true,中断线程后退出,如可等待,则什么都不做。
 
你可以在每个可以独立执行的块后检测,terminated值,如果为True则直接退出
然后在退出terminate(),再waitfor,速度应该有所提升
 
不管怎样,我觉得在设计程序时,你应该考虑在退出主程序时,让线程的当前操作完成啊,强行退出我觉得不太好吧...
如果在执行完部分操作后再退出,那就像按上面说的一样,置terminated值为true就可了...
 
>>在程序中有一线程,用定时器设置成每隔5分钟自动执行一次
你这个程序写的实在不怎么样,有线程了还要什么定时器??用了定时器何必还用线程??
最好等待线程执行完后退出,否则。。。
 
后退
顶部