TThead类中的异常怎么处理?(50分)

  • 主题发起人 主题发起人 var2001
  • 开始时间 开始时间
V

var2001

Unregistered / Unconfirmed
GUEST, unregistred user!
线程中代码一多就容易出错,甚至死机。有什么好办法来解决?
 
type
PRaiseFrame = ^TRaiseFrame;
TRaiseFrame = record
NextRaise: PRaiseFrame;
ExceptAddr: Pointer;
ExceptObject: TObject;
ExceptionRecord: PExceptionRecord;
end;

procedure TMyThread.Execute;
procedure SynchronizeException;
var
SendException: TObject;
begin
if RaiseList <> nil then
begin
SendException := PRaiseFrame(RaiseList)^.ExceptObject;
PRaiseFrame(RaiseList)^.ExceptObject := nil;
PostMessage(Form1.Handle, THREAD_EXCEPTION, 0, Integer(Pointer(SendException)));
end;
end;

begin
try
raise Exception.Create('Hello world');
except
SynchronizeException
end;
end;

procedure tform1.onthreadexception(var msg: tmessage);
//message THREAD_EXCEPTION
var
E: Exception;
begin
E := Exception(msg.lParam);
raise E;
end;
 
TThead类中的异常,就要在 TThread.Execute 里面自己捕捉
procedure TThread.Execute;
begin

try
//////////////全部代码写于此处,全部代码都在try的保护之下
except on e:Exceptiondo
end;

end;
 
出异常,肯定是有错误或者缺陷的代码。
你可以在execute中加异常保护,一步一步的缩小范围,来找出问题代码。
 
后退
顶部