覆盖Free方法是否安全?

TLa*_*ama 3 delphi overriding destructor

覆盖Free方法是否安全?我问,因为我想使用这样的东西.我知道使用TerminateThread是非常难看的,但在我的情况下,立即使用其所有线程终止进程非常关键.

我已经看到在System.pas中声明的__free方法,但我不知道它是否与TObject.Free方法有关,这就是为什么我问它是否安全的原因.

type
  TMyThread = class(TThread)
  private
    destructor Destroy; override;
  public
    procedure Execute; override;
    constructor Create;
    procedure Free(const Force: Boolean = False); // is it safe to use this?
  end;

procedure TMyThread.Free(const Force: Boolean = False);
begin
  if not Force then
  begin
    Terminate;
    WaitFor;
  end
  else
    TerminateThread(Handle, 0);

  inherited Free;
end;

destructor TMyThread.Destroy;
begin
  // free resources etc.
  inherited Destroy;
end;
Run Code Online (Sandbox Code Playgroud)

谢谢

jpf*_*ius 10

你无法覆盖,Free因为它不是虚拟的.如果您定义自己的Free方法,它将隐藏TObject.Free方法(注意编译器警告),如果静态类型是您的类类型.这绝对不是一个好主意,因为这个对象永远不会被破坏.

我没有看到你为什么这么做的原因.如果你真的想使用TerminateThread那么只需给你的线程类另一个方法ForceTerminate,你可以在其中调用TerminateThread.