5

我在 Delphi 中有一个代码,它执行以下操作:

procedure THilo.Execute; // (which is the thread)
begin
  inherited;
  FreeOnTerminate := True;
  while not Terminated do
  begin
    (...)
    Sleep(100);
  end;
end;

现在在其他地方,在另一个线程(或 GUI)中,我们这样做:

var
  Hilo2: THilo;
begin
  Hilo2 := THilo.Create(True);
  Hilo2.start;
  Hilo2 := THilo.Create(True);
  Hilo2.start;
end;

现在我们已经执行了 2 次同一个线程,它们是并行运行的。如果我们现在这样做会发生什么?:

  Hilo2.Terminate;

这会终止两个线程还是仅终止 1 个线程,还是什么?另外,如果我们想终止它,我们可以通过.Resume() 来实现吗?

提前致谢

4

1 回答 1

8

当您创建第二个线程时,您将Hilo2使用指向第二个对象的指针覆盖局部变量 - 第一个对象的指针丢失并且您不再有任何对它的引用(或控制它的方法)。如果线程没有自行终止,这将导致内存泄漏,不,调用终止不会停止两个线程,只有最后一个使用该变量作为引用创建的线程。此外,无需调用TThreadinheritedExecute方法 - 没有可继承的内容(TThread 的执行方法是抽象的,它不做任何事情)。

于 2013-05-21T23:10:57.340 回答