在Delphi中使用线程,当窗体关闭时,如果窗体中启用了线程,一般需要手动关闭,以释放资源。 常用来结束线程的代码为:

thread.Terminate

thread.WaitFor

即先触发Terminate方法,然后等待线程的结束。这种方法要求线程不能使用

FreeOnTerminate := True

否则在WaitFor即将结束的时候会引发“无效句柄”的错误。 这种方法在窗体关闭的时候会等待一段事件(因为WaitFor)。

因此,如果不是在主窗体中结束线程时,其实我们可以不必使用WaitFor。而是采用如下方法: 将FreeOnTerminate := True这样在窗体关闭的代码中直接调用

thread.Terminate 即可。

注意: 如果设置了 thread.OnTerminate := SomeFunction 那么在调用PcmThrd.Terminate前尽量将thread.OnTerminate := nil,以免结束线程后SomeFunction中的变量出现空指针错误。当然,这不是绝对的,需要根据具体程序而定 .