请问怎么结束一个线程(50分)

  • 主题发起人 主题发起人 郭剑南
  • 开始时间 开始时间

郭剑南

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎么在程序结束之前结束一个线程呢?
 
应该不困难吧... 在主窗体的OnClose方法中调用结束线程的方法就可以了。
这个线程是用Delphi的线程类创建的吗?
if Yes then
use: Thread1.Terminate;
如果是用API创建的,就用API TerminateThread终结它。参见Delphi的帮助(MSDN也行)。
 
首先,在你的线程的Execute过程中,经常的判断Terminated:
procedure TMyThread.Execute;
begin
...
while ...do
begin
...

if Terminated then
Exit;
end;
end;

然后,在主程序中调用
MyThread.Terminate;
然后,等到线程执行到那句 if Terminated then
Exit;
线程就会结束了。
你可能会问,难道线程不会在调用Terminate方法以后自动结束吗?
答案是不会,一定要程序判断Terminated然后自行终止。
 
请问飞龙在天

调用MyThread.Terminate 在线程中做了什么操作呢?

在VCL中的Thread是执行完Execute中的函数就会自动退出吗?
 
“调用MyThread.Terminate 在线程中做了什么操作呢?”
就是把Terminated置成True,仅此而已,你假如不去判断Terminated的话,等于什么也没做。

“在VCL中的Thread是执行完Execute中的函数就会自动退出吗?”
是的。
 
给你一个停止线程的例子

interface
type
Txyz = class(TThread)
published
procedure Execute;
override;
end;

var
XYZThread: Txyz;
implementation
procedure Txyz.Execute;
begin
while Truedo
Application.ProcessMessages;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
XYZThread := Txyz.Create(False);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
XYZThread2.Suspend;
XYZThread2.Free;
end;

end.
 
我的线程是用CreateThread函数建立的!
 
果然!
TerminateThread终结线程非常有效,但是比较野蛮,建议还是采用Delphi的方法,在线程中设置一个主线程
可以访问的全局变量,循环判断,让其自然死亡。The ExitThread function ends a thread.
 
ExitThread
or CloseHandle(XYZThread.Handle)
听听
 
建议使用线程类,这个类写地不错
 
多人接受答案了。
 
后退
顶部