在delphi中如何判断线程终止
1个回答
2018-05-28 · 知道合伙人互联网行家
关注
展开全部
在Delphi中使用线程,当窗体关闭时,如果窗体中启用了线程,一般需要手动关闭,以释放资源。 常用来结束线程的代码为:
thread.Terminate;
thread.WaitFor;
即先触发Terminate方法,然后等待线程的结束。这种方法要求线程不能使用
FreeOnTerminate := True;
否则在WaitFor即将结束的时候会引发“无效句柄”的错误。 这种方法在窗体关闭的时候会等待一段事件(因为WaitFor)。
因此,如果不是在主窗体中结束线程时,其实我们可以不必使用WaitFor。而是采用如下方法: 将FreeOnTerminate := True;这样在窗体关闭的代码中直接调用
thread.Terminate; 即可。
注意: 如果设置了 thread.OnTerminate := SomeFunction; 那么在调用PcmThrd.Terminate;前尽量将thread.OnTerminate := nil,以免结束线程后SomeFunction中的变量出现空指针错误。当然,这不是绝对的,需要根据具体程序而定 .
thread.Terminate;
thread.WaitFor;
即先触发Terminate方法,然后等待线程的结束。这种方法要求线程不能使用
FreeOnTerminate := True;
否则在WaitFor即将结束的时候会引发“无效句柄”的错误。 这种方法在窗体关闭的时候会等待一段事件(因为WaitFor)。
因此,如果不是在主窗体中结束线程时,其实我们可以不必使用WaitFor。而是采用如下方法: 将FreeOnTerminate := True;这样在窗体关闭的代码中直接调用
thread.Terminate; 即可。
注意: 如果设置了 thread.OnTerminate := SomeFunction; 那么在调用PcmThrd.Terminate;前尽量将thread.OnTerminate := nil,以免结束线程后SomeFunction中的变量出现空指针错误。当然,这不是绝对的,需要根据具体程序而定 .
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询