在delphi中终止一个线程

时间:2011-03-14 08:41:25

标签: multithreading delphi terminate

如何以正确的方式终止线程? 线程完成后,它仍然在内存中。我正在使用Delphi 2010(Update 5)。

3 个答案:

答案 0 :(得分:11)

我通常描述线程终止问题的方法是强调合作。你不应该终止一个线程。相反,您应该通知线程您希望它终止。然后礼貌地等到它终止。

原因很明显。只有线程知道如何终止自身。只有线程知道它拥有什么锁,需要释放哪些资源等。

如果您希望暂停或暂停线程的执行,则适用相同的参数。您应该要求它这样做,然后让线程在安全的情况下找到一个方便的时刻。

使用Delphi TThread,请求终止的标准方法是调用Thread.Terminate。这只不过是在线程对象中设置一个标志。这是请求。响应由TThread.Execute内的线程代码启动。这应该定期检查其Terminated属性的值。如果发现它是真的,它应该退出该函数。当然,在调用exit之前,应该执行任何整理(释放锁定,返回资源等)。

答案 1 :(得分:3)

你是如何终止一个线程的?如果您只是设置Terminate,这只是在线程内部检查的标志。如果您需要终止执行线程(并且不发信号通知它需要完成的TThread对象),您可以使用TerminateThread WinAPI函数。但是您应该注意到这会导致资源泄漏(如TerminateThread文档中的注释中所述)。

答案 2 :(得分:3)

取决于你想用该线程完成什么。在我们为您提供帮助之前,您应该提供有关您想要做的事情的更多详细信息。

这里有一个关于如何在Delphi中使用线程的非常好的教程:

http://www.eonclash.com/Tutorials/Multithreading/MartinHarvey1.1/Ch1.html

http://docwiki.embarcadero.com/RADStudio/en/Writing_multi-threaded_applications_Index