我写了一个线程,在主窗体中单击一个button来创建这个线程。
这个线程不会去访问VCL,只做数值计算用。
在线程的Execute中
如果使用Synchronize(),它会使用主VCL线程,这样一来,在这个线程执行中,我的主窗口死锁,什么事情都做不了。
于是我没有使用Synchronize(),这样以来在线程执行的时候,我的主窗口可以活动。
但是,当我要退出主窗口的时候。我用
Athread.Terminate;
close;
总是报错。不能够正常终止程序!这个问题改如何解决?
这个线程不会去访问VCL,只做数值计算用。
在线程的Execute中
如果使用Synchronize(),它会使用主VCL线程,这样一来,在这个线程执行中,我的主窗口死锁,什么事情都做不了。
于是我没有使用Synchronize(),这样以来在线程执行的时候,我的主窗口可以活动。
但是,当我要退出主窗口的时候。我用
Athread.Terminate;
close;
总是报错。不能够正常终止程序!这个问题改如何解决?
Athread.Terminate;只是把thread.terminated标为true
Execute执行完后检查terminated如果为true则退出。
改为如下:
while not terminated do
begin
......//place your code here
end;
while not terminated do
begin
......//place your code here
end;但是我的一次处理就需要很长时间(几分钟),我想让它立即终止,恐怕这样写,会达不到效果吧
或者用强制推出terminatethread(thread.handle,0),不过不推荐
或者用强制退出terminatethread(thread.handle,0),不过不推荐容易造成资源泄漏。
,但是,我要是退出时,这个SQL查询还在执行,如何是好?
另外terminatethread(thread.handle,0)我也知道,但是不安全,肯定是不能用的,那么如何是好?