我需要知道,当在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;
答案 0 :(得分:11)
因为在用户模式下,如果没有附加进程,线程就不能存在,线程将自动终止。但是,如果该线程正在做一些不能立即中断的事情(例如某些I / O操作),则进程可能会延迟完全终止
答案 1 :(得分:4)
设置已终止不会自动终止线程。
Terminated属性是从不同的线程设置的,以向工作线程发信号通知它应该终止。然后由工作线程通过检查执行过程中的Terminated标志来遵守信号。
执行过程完成后,将自动设置Thread的Finished属性。
当主进程被终止时,您的线程将被中断并强制终止。如果结束,你的意思是,它会到达执行程序的结尾,然后是否。它可能会在中间停止。
在主窗体的close查询中,在线程上设置Terminated属性并等待它们“完成”是礼貌的。你可以遍历它们并检查。但是在一次很好的超时之后,你可能想要放弃并关闭程序,这会中断并杀死线程。
答案 2 :(得分:2)
“终止”也可能(应该)在Windows关闭消息进程中使用。应该在Thread处理的安全点调用Terminate。关闭数据集等