在delphi中,TThread中的一个方法是终止的。似乎一个subthread不能通过调用终止或免费杀死另一个线程。
例如
A(主要形式),B(螺纹单元),C(另一种形式)。
例如
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,直到你绝对确定你有所有可能的后果。目前你没有,所以使用第一种方法。