还是线程问题,超级不爽 ( 积分: 6 )

  • 主题发起人 主题发起人 hfutzhu
  • 开始时间 开始时间
H

hfutzhu

Unregistered / Unconfirmed
GUEST, unregistred user!
看了很多线程中止帖子,还是没有解决,我的程序里有个主窗体f1,点一个按钮跳出f2,f2上再点一个按钮跳出f3,f3是显示数据的,数据库操作单独放在一个线程了如果等f3全部该显示的数据全部显示了,也就是线程结束了,关闭f1 f2 f3没问题。但是当线程海在运行时,关闭f3 f2没什么问题,但是关闭主程序窗体f1就发生错误了,哪位大哥指点一下了!在关闭窗体的时候,我也把线程关闭了哦!
if ThreadActive = true then
begin
tthread.Terminate;
ThreadActive :=false;
end;
close;不知道这么写可对??
 
不行。。。。
你要知道线程有个WaitFor指令,可以用来等待线程结束,
如果你在程序末端你可以到google找API类代码,能直接杀线程的。
 
把顺序颠倒过来似乎合理,这样:
ThreadActive :=false
tthread.Terminate;
我怀疑线程没得到释放,再改成:
ThreadActive :=false
tthread.Terminate;
tthread.Free;
//或者线程创建时候干脆写FreeOnTerminate属性为true就省略此行了。
第三个可怀疑的地方是:窗体关闭时候程序逻辑可能在一个死循环里,比如:
while ....begin
... end.
想办法跳出来才可以。
第四个可能是你的窗体调用了Free方法释放的,应该改用Release。Release会安全调用Free
Fomr1:= TFrom1.Create...
try
Form1.ShowModal;
finally
Form1.Release;
//do not use Form1.Free
end;
 
FreeOnTerminate :=true;我也写了阿 正因为写了 关闭窗体的时候也会错,所以在关闭窗体的时候就加了,好像不能重复结束是吧!
 
可以在tthread线程内调用ExitThread(0) 或者在其他任何线程调用
TerminateThread(tthread.Handle, 0);
不过估计你的问题不是由线程是否关闭引起的
 
但是我等到线程正常结束了之后再退出程序 ,就不会发生这样的情况了阿 所以还是线程在运行过程中怎么才算是正常把它关了??
 
接受答案了.
 
后退
顶部