线程执行完毕后和执行过程中退出主程序的问题。(100分)

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

Doomguard

Unregistered / Unconfirmed
GUEST, unregistred user!
线程执行完毕后退出主程序没有问题(线程执行了后台存储过程),
执行过程中退出主程序的话,主进程在任务管理器中变成没有响应。
而且在2K下似乎比98下更容易报错,但是98下出错的话只有Power键
方能解决问题(我是98的系统,简直无法调试,痛苦不堪)。那位大侠
可有良方,救偶于水火。
 
我在线程执行的函数里调用了后台的存储过程,在存储过程执行的过程中关闭主进程会
发生什么错误么?
 
设置定时器,隔一段时间检测子线程是否完成,是的话,取消定时器。
 
这种事我碰见多了,请参阅下面问题中我的对策(虽然很不完美):
http://www.delphibbs.com/delphibbs/dispq.asp?lid=750068
问题:怎样强制性终止正在运行的线程? ( 积分:50, 回复:5, 阅读:63 )
来自:luckystart, 时间:2001-11-25 20:24:00, ID:750068
 
另:》》在2K下似乎比98下更容易报错
不会吧。(我很少在98下,只能“吧”)
顺便提一下:DELPHI6中的线程WAITFOR比DELPHI5中的要好一些,多做了一些工作,
有改进,不过好像速度要慢得多。
>>在存储过程执行的过程中关闭主进程会发生什么错误么?
一般不会(主线程会等待子线程结束),有可能。
 
Huzzz:在线程没有执行完毕时我用ExitThread函数强行终止线程,但是Windows会出现报警的蓝屏
幕:A fatal exception 0E has occured at 0028...in...说当前应用程序将被终止,按任
意键继续。用什么方法可以保证安全的终止线程(指线程没有执行完毕,而是因为主进程的
结束而终止)。
 
zxyfd2000:我的线程FreeOnTerminate := True;主要的流程在线程类的一个循环里完成。
能把定时器监控线程的想法说的详细一点吗?
 
Doomguard, ExitThread是终止当前线程啊。你如果在主线程中调用ExitThread则整个
程序会立即死掉。我们一般不需要使用ExitThread。
另外请再参阅下面问题,我又加了点回答:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=750068
 
Huzzz:如果我在主线程中调用TerminateProcess(),有何不妥?
 
todo
omguard,
没什么不妥,TerminateProcess会让指定进程中的所有子线程结束,并退出进程,但
子进程不会结束(我想起在“任务管理器中”的“结束进程”)。
感觉上也是一个比较危险的函数。这个函数我没有用过,你自己瞧着办吧。
 
多人接受答案了。
 
顶部