还是多线程退出的问题!加急(100分)

  • 主题发起人 主题发起人 小虾米爱吃鱼
  • 开始时间 开始时间

小虾米爱吃鱼

Unregistered / Unconfirmed
GUEST, unregistred user!
说明:主线程界面显示,数据入库等,付线程负责数据采集,采集来的数据放在界面上的MEMO中,然后主线程通过时间通过定时来将数据入库。
问题:在主界面上有个退出按扭,该按扭下的事件如下写的:
当运行到 TKQ_Thread.Terminate;时,如果该线程立即退出了,那程序就报错了1400,如果可以运行到application.ProcessMessages;则可以安全退出。
begin
for i:=low(TKQ_Thread) to High(TKQ_Thread)do
begin
TKQ_Thread.Terminate;
application.ProcessMessages;
end;
for i:=low(TKQ_Thread) to High(TKQ_Thread)do
begin
IExit:=0;
with TKQ_Threaddo
begin
Try
for j:=0 to 20do
begin
if GetExitCodethread(Handle,IExit) then
begin
sleep(100);
Continue;
end
else
Break;
end;
if j>20 then
begin
TerminateThread(Handle,IExit);
end;
except
;
end;
end;
end;
application.ProcessMessages;
application.Terminate;
end;
 
TKQ_Thread.FreeOnTerminate => False,用代码来进行TKQ_Thread的Free,也不要调用TerminateThread(Handle,IExit)这样的函数,那不适合用于TThread封装的线程。
TKQ_Thread.Terminate之后,可以TKQ_Thread.WaitFor等待线程结束
 
同意楼上的
 
那用线程同步方式,用标志变量来控制线程自己结束,那不会更好吗?
 

Similar threads

后退
顶部