gpt4 book ai didi

multithreading - 当您终止()一个线程(TThread 类)时,它是否会退出该线程的每个子线程?

转载 作者:行者123 更新时间:2023-12-03 15:08:29 25 4
gpt4 key购买 nike

我在 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;

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

  Hilo2.Terminate;

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

提前致谢

最佳答案

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

关于multithreading - 当您终止()一个线程(TThread 类)时,它是否会退出该线程的每个子线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16680560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com