覆盖Free方法是否安全?我问,因为我想使用这样的东西。我知道使用TerminateThread非常难看,但在我的情况下,立即使用其所有线程终止进程非常关键。
我见过在System.pas中声明的__free方法,但我不知道它是否与TObject.Free方法有关,这就是为什么我问它是否安全的原因。 / p>
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;
谢谢
答案 0 :(得分:10)
您无法覆盖Free
,因为它不是虚拟的。如果您定义自己的Free
方法,如果静态类型是您的类类型,它将隐藏TObject.Free
方法(请注意编译器警告)。这绝对不是一个好主意,因为对象永远不会被破坏。
我认为你没有理由这样做。如果确实想要使用TerminateThread
,那么只需给你的线程类另一个方法ForceTerminate
,在其中调用TerminateThread
。