Multithreading 如果线程的主进程被强制终止,线程是否会自动终止?

Multithreading 如果线程的主进程被强制终止,线程是否会自动终止?,multithreading,delphi,process,delphi-7,destructor,Multithreading,Delphi,Process,Delphi 7,Destructor,我需要知道,在Delphi7中使用线程(TThread)时,如果我强制终止进程,线程会被终止还是继续运行 我的执行过程如下所示,如果线程终止,那么它将停止。但是如果线程从未被正式终止呢 procedure TJDApplicationThread.Execute; var ST: Integer; begin ST:= 5; fStop:= False; while (not Terminated) and (not fStop) do begin //----- BEG

我需要知道,在Delphi7中使用线程(TThread)时,如果我强制终止进程,线程会被终止还是继续运行

我的执行过程如下所示,如果线程终止,那么它将停止。但是如果线程从未被正式终止呢

procedure TJDApplicationThread.Execute;
var
  ST: Integer;
begin
  ST:= 5;
  fStop:= False;
  while (not Terminated) and (not fStop) do begin
    //----- BEGIN -----

    Synchronize(DoSync);

    //-----  END  -----
    //Sleep(1000 * ST);
  end;
end;

因为在用户模式下,线程在没有附加进程的情况下不能存在,所以线程将自动终止。但是,如果该线程正在执行不能立即中断的操作(例如某些I/O操作),则进程完全终止可能会有延迟。

设置Terminated不会自动终止该线程

Terminated属性是从另一个线程设置的,以向工作线程发出应该终止的信号。然后工作线程通过检查Execute过程中的Terminated标志来遵守该信号

执行过程完成后,将自动设置线程的finished属性

当主进程被终止时,线程将被中断并强制终止。如果结束,你的意思是,它会到达执行程序的末尾吗?然后,不。它可以在中间停止。


在主窗体的close查询中,最好在线程上设置Terminated属性并等待它们“完成”。你可以循环检查它们。但是,在一个很好的超时之后,您可能想放弃并关闭程序,这将中断并终止线程。

如果用户正在关闭计算机且线程正在运行,则Windows关机消息进程中也可能(应该)使用“终止”。应该在线程处理的安全点调用Terminate。关闭数据集等

因此,无论发生什么,只要线程中发生的事情在某一点结束,
终止的
属性最终将为真,对吗?不一定。。。想想上面的代码是如何运行的。你的主进程也在一个线程上运行,如果该线程在你的子线程之前死亡,那么主线程将没有时间更新该属性。我明白了,但是当进程终止时,线程最终会结束吗?@Jerry,Terminated属性是从另一个线程设置的,以向工作线程发出应该终止的信号。然后工作线程通过检查Execute过程中的Terminated标志来遵守该信号。Execute过程完成后,线程的finished属性会自动设置。我所说的“进程完全终止可能会有延迟”是指并非所有线程在任何情况下都会立即终止。(我排除了线程执行中所有不相关的功能)下面回答的问题,主要的问题是,我担心如果
Terminated
从未设置为
true
,这件事将无法运行。当您终止进程时,进程拥有的所有东西,包括线程也将被终止。终止的属性是无关的。这个系统会毁掉一切。没有问题。现在,更大的问题是为什么要终止进程。最好让他们关闭。我不是进程杀手,但有时进程是如此顽固,我别无选择,只能杀死它们。事实上,这也包括在调试应用程序的过程中使用“程序重置”。好点,这是在关机/重新启动时停止线程的一种快速方法。