创建TThread不进入我的Create()方法

Creating TThread does not enter my Create() method

我正在使用 Delphi Rio。我创建了一个线程 class.

type
  TThreadManager = class(TThread)
    constructor Create;
  end;

constructor TThreadManager.Create;
begin
  inherited Create(True);     // thread-ul va fi creat, dar nu va rula
                               // pentru a-l rula, folosim "Resume" (sau "Execute")
  FreeOnTerminate := True;     // thread-ul va fi distrus automat cand termina
  Priority        := tpNormal; // prioritatea thread-ului este minima
  <- creating internal objects here
  fIsSetupOk      := False;
end;

但是,当我在应用程序中创建线程时,没有使用(这个)构造函数。没有可用的调试断点。也没有创建任何对象。

threadManager := TThreadManager.Create;
threadManager.Setup(dmMain.ibSessionMain);
threadManager.Resume;

因为没有进入这个构造函数,所以在访问对象时会引发AV。

有什么提示吗?

当然,我可以在别处(在设置中)创建对象,但这不是我想要的。

TThread 有自己的无参数 Create() 构造函数。您应该将您的声明为 reintroduce 以隐藏现有的,例如:

type
  TThreadManager = class(TThread)
  public
    constructor Create; reintroduce;
  end;

更好的选择是在 Create() 内部调用 Setup(),然后设置 CreateSuspended=False。这样,调用哪个构造函数就不会产生歧义,线程会在Setup()完成后自动启动运行,eg:

type
  TThreadManager = class(TThread)
  public
    constructor Create(Session: TIB_Session); reintroduce;
  end;

constructor TThreadManager.Create(Session: TIB_Session);
begin
  inherited Create(False);
  FreeOnTerminate := True;
  Priority := tpNormal;
  <- creating internal objects here
  fIsSetupOk := False;
  Setup(Session);
end;

threadManager := TThreadManager.Create(dmMain.ibSessionMain);

或者,您可以将构造函数重命名为更有意义的名称,例如:

type
  TThreadManager = class(TThread)
  public
    constructor CreateAndSetup(Session: TIB_Session);
  end;

constructor TThreadManager.CreateAndSetup(Session: TIB_Session);
begin
  inherited Create(False);
  FreeOnTerminate := True;
  Priority := tpNormal;
  <- creating internal objects here
  fIsSetupOk := False;
  Setup(Session);
end;

threadManager := TThreadManager.CreateAndSetup(dmMain.ibSessionMain);

在我使用 remy 的建议 2 后,我在 我的代码 中发现了问题。
按照建议创建方法后(添加 TIB_SESSION 作为参数)我发现该方法不可用,因为在 protected 部分中声明的不是 public.
输入正确的部分后一切正常。
非常感谢