//我建议把那个异常线程单拿出来,在以下函数处做断点处理!下面是线程类封装的线程函数! function ThreadProc(Thread: TThread): Integer; var FreeThread: Boolean; begin
try if not Thread.Terminated then try Thread.Execute; except Thread.FFatalException := AcquireExceptionObject; end; finally FreeThread := Thread.FFreeOnTerminate; Result := Thread.FReturnValue; Thread.DoTerminate; Thread.FFinished := True; SignalSyncEvent; if FreeThread then Thread.Free;//这个地方比较关键,跟踪一下!
//我建议把那个异常线程单拿出来,在以下函数处做断点处理!下面是线程类封装的线程函数!
function ThreadProc(Thread: TThread): Integer;
var
FreeThread: Boolean;
begin
try
if not Thread.Terminated then
try
Thread.Execute;
except
Thread.FFatalException := AcquireExceptionObject;
end;
finally
FreeThread := Thread.FFreeOnTerminate;
Result := Thread.FReturnValue;
Thread.DoTerminate;
Thread.FFinished := True;
SignalSyncEvent;
if FreeThread then Thread.Free;//这个地方比较关键,跟踪一下!
EndThread(Result);
end;
end;
所以,我想是不是另一个线程的启动干扰了这个线程的释放。当然,这两个线程之间没有什么联系。
做了一个处理,执行关掉线程时,等待一定时间,然后用GetExitCodeThread检查线程是否终止。如果还在直接TerminateThread。