6

如何以正确的方式终止线程?当线程结束时,它仍然在内存中。我正在使用 Delphi 2010(更新 5)。

4

3 回答 3

11

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

其原因是显而易见的。只有线程知道如何终止自己。只有线程知道它持有什么锁,它需要释放什么资源等等。

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

使用 DelphiTThread请求终止的标准方法是调用Thread.Terminate. 这只不过是在线程对象中设置一个标志。这就是请求。响应是由里面的线程代码发起的TThread.Execute。那应该定期检查其Terminated财产的价值。当发现为真时,它应该从函数中退出。自然地,任何整理(释放锁、返回资源等)都应该在调用 exit 之前执行。

于 2011-03-14T12:02:15.863 回答
3

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

于 2011-03-14T08:59:56.330 回答
3

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

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

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

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

于 2011-03-14T09:00:41.573 回答