加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在delphi中杀死线程?

发布时间:2020-12-15 10:18:07 所属栏目:大数据 来源:网络整理
导读:在delphi中,TThread中的一个方法是终止的。似乎一个subthread不能通过调用终止或免费杀死另一个线程。 例如 A(主要形式),B(螺纹单元),C(另一种形式)。 B正在向主窗体和C(通过调用syncronize)发送数据,我们尝试在C中终止B,而B通过调用B.terminate来执行
在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,直到你绝对确定你有所有可能的后果。目前你没有,所以使用第一种方法。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读