我正在尝试使用线程进行Web服务调用.出于这个原因,我定义了一个简单的对象,并从一个线程调用它的方法.
但我意识到在销毁该对象后我仍然可以使用它的方法而没有任何错误,它会返回正确的答案.怎么可能?你有什么评论吗?
// TThreadMethod is defined in Classes.pas
TThreadMethod = procedure of object;
*********************
Interface
*********************
TMyObject = class(TObject)
procedure DoSomething;
end;
TMyThread = class(TThread)
private
FMethod : TThreadMethod;
protected
procedure Execute; override;
public
constructor Create(aMethod: TThreadMethod);
end;
*********************
Implementation
*********************
// I called the thread and destroyed the object immediately.
procedure TForm1.Button1Click(Sender: TObject);
var
aObject : TMyObject;
begin
aObject := TMyObject.Create;
TMyThread.Create(aObject.DoSomething);
FreeAndNil(aObject); // Object itself was destroyed here.
end;
constructor TMyThread.Create(aMethod: TThreadMethod);
begin
inherited Create(True);
FreeOnTerminate := True; …Run Code Online (Sandbox Code Playgroud)