如何在delphi中杀死线程?

前端之家收集整理的这篇文章主要介绍了如何在delphi中杀死线程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在delphi中,TThread中的一个方法是终止的。似乎一个subthread不能通过调用终止或免费杀死另一个线程。
例如
A(主要形式),B(螺纹单元),C(另一种形式)。

B正在向主窗体和C(通过调用syncronize)发送数据,我们尝试在C中终止B,而B通过调用B.terminate来执行。但是这种方法不起作用,并且B仍然运行,直到执行方法结束为止。

请帮忙。先谢谢你。

解决方法

你必须在线程中检查Terminate才能工作。例如:
procedure TMyThread.Execute;
begin
  while not Terminated do begin
    //Here you do a chunk of your work.
    //It's important to have chunks small enough so that "while not Terminated"
    //gets checked often enough.
  end;
  //Here you finalize everything before thread terminates
end;

有了这个,你可以打电话

MyThread.Terminate;

一旦它完成处理另一个工作,它就会终止。这被称为“优雅的线程终止”,因为线程本身有机会完成任何工作并准备终止。

还有另一种方法叫做“强制终止”。你可以拨打:

TerminateThread(MyThread.Handle);

执行此操作时,Windows会强制停止线程中的任何活动。这不需要检查线程中的“已终止”,但潜在地可能是非常危险的,因为您在操作中断线程。之后您的应用程序可能会崩溃。

这就是为什么你永远不会使用TerminateThread,直到你绝对确定你有所有可能的后果。目前你没有,所以使用第一种方法

猜你在找的Delphi相关文章