如果主要进程强制结束,线程是否会自动终止?

时间:2011-12-04 05:10:34

标签: multithreading delphi process delphi-7 destructor

我需要知道,当在Delphi 7中使用线程(TThread)时,如果我强行终止进程,那么线程是terminated还是会继续?

我的执行过程如下所示,如果线程终止,那么这将停止。但是如果线程永远不会被正式终止呢?

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;

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:4)

设置已终止不会自动终止线程。

Terminated属性是从不同的线程设置的,以向工作线程发信号通知它应该终止。然后由工作线程通过检查执行过程中的Terminated标志来遵守信号。

执行过程完成后,将自动设置Thread的Finished属性。

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

在主窗体的close查询中,在线程上设置Terminated属性并等待它们“完成”是礼貌的。你可以遍历它们并检查。但是在一次很好的超时之后,你可能想要放弃并关闭程序,这会中断并杀死线程。

答案 2 :(得分:2)

如果用户正在关闭计算机并且线程正在运行,

“终止”也可能(应该)在Windows关闭消息进程中使用。应该在Thread处理的安全点调用Terminate。关闭数据集等