如何在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,直到你绝对确定你有所有可能的后果。目前你没有,所以使用第一种方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |