我的是在主线程中动态的生成很多线程,然后将这些线程加在一个list里面,关闭的时候要全部终止这些线程。 我调试的结果是:虽然线程已经在主线程中被终止,即Terminated是true,但是如果刚好在结束之前已经执行到线程的Execute里面,线程还是会继续执行下去的,但是主线程已经把它用到的一些资源给释放,这样就会报错,我把错误屏蔽后,不影响软件的使用,但是会退出。 线程执行代码: while (not Terminated) do begin if Terminated then Exit;//此判断是后来加的,就因为这个出的错误。 end;仅供参考,找了很久才找到。多线程就是麻烦。
主进程中断线程后,不要立即释放线程所用到的资源,最好应该再延迟一段时间等到线程正常中止。 如: procedure TPHSSendThread.Execute; begin while not Terminated do begin ............ end; __ThreadIsRun:=False; end;下面是主进程关闭事件: MyPHSThread.Terminate; while __ThreadIsRun do __ThreadIsRun是一个Bool标志 sleep(1000); //上面是等待线程正常中断完成,否则的话,主进程将关闭数据库连结导至线程出错。 AC_Source.Close; AC_Dest.Close; CloseFile(LogFile); FreeAndNil(Q_Source); FreeAndNil(Q_Dest); FreeAndNil(AC_Source); FreeAndNil(AC_Dest); CoUnInitialize;
To Dlwxn(蓝天) : 我的程序是用一个数组来保存所有客户端的socket连接。在线程里根据要求对相应客户发送数据。可能也存在你所说的问题。主要是在客户断开连接时,可能线程还在发送数据。我现在是在发送时socket.luck。试试看行不行。觉得线程也就是麻烦。不知程序到底是一些什么情况就会自动退出呢。
我以前也见过程序错误太多就自动退出。但我现在的退出,是没有出现一个错误就自动退出。我在appliation.onexcept中没有接到一个错误信息,如果是内出错误,也会弹出错误框啊。而且最怪的是退出时怎么也拦不到它的出错误信息。我是在错误发生时写入.txt文件的。有没有更彻底的方法拦到出退出信息。我试过了很多方法了。主form 的onclose,ondestory,还有在application.run后都无法拦到。就是不知它从哪里退出的。
我调试的结果是:虽然线程已经在主线程中被终止,即Terminated是true,但是如果刚好在结束之前已经执行到线程的Execute里面,线程还是会继续执行下去的,但是主线程已经把它用到的一些资源给释放,这样就会报错,我把错误屏蔽后,不影响软件的使用,但是会退出。
线程执行代码:
while (not Terminated) do
begin
if Terminated then Exit;//此判断是后来加的,就因为这个出的错误。
end;仅供参考,找了很久才找到。多线程就是麻烦。
如:
procedure TPHSSendThread.Execute;
begin
while not Terminated do begin
............
end;
__ThreadIsRun:=False;
end;下面是主进程关闭事件:
MyPHSThread.Terminate;
while __ThreadIsRun do __ThreadIsRun是一个Bool标志
sleep(1000);
//上面是等待线程正常中断完成,否则的话,主进程将关闭数据库连结导至线程出错。
AC_Source.Close;
AC_Dest.Close;
CloseFile(LogFile);
FreeAndNil(Q_Source);
FreeAndNil(Q_Dest);
FreeAndNil(AC_Source);
FreeAndNil(AC_Dest);
CoUnInitialize;
我的程序是用一个数组来保存所有客户端的socket连接。在线程里根据要求对相应客户发送数据。可能也存在你所说的问题。主要是在客户断开连接时,可能线程还在发送数据。我现在是在发送时socket.luck。试试看行不行。觉得线程也就是麻烦。不知程序到底是一些什么情况就会自动退出呢。