我是一个DELPHI初学者,最近有做了个关于线程的程序,该程序的线程循环运行一段代码,我希望可以通过程序窗口的一个按钮来使线程停止运行,网上找了好几天的资料,后来了解到利用Thread.Terminate可以实现,但无论网上贴出来的源码,或是下载的源代码,我这边都无法实现关闭线程,不是报错,就是按了没反应,不知是我语法有错,还是软件的问题,所以希望各位大哥大姐可以帮帮小弟,我的程序源码如下(windows xp sp3 + delphi 7):
主程序:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses Unit2;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
TThread:time;
begin
TThread:=time.Create(true);
TThread.Resume;
end;procedure TForm1.Button2Click(Sender: TObject);
var
TThread:time;
begin
TThread.Terminate;
TThread.free;
end;end.线程:
unit Unit2;interfaceuses
Classes,Windows, Forms;type
time = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;implementation
procedure time.Execute;
var
i:integer;
begin
i:=0;
while not Terminated do
begin
Application.MessageBox('提示','你好',MB_OKCANCEL);
sleep(5000);
//if Terminated=true then exit;
end;
end;end.
主程序:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses Unit2;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
TThread:time;
begin
TThread:=time.Create(true);
TThread.Resume;
end;procedure TForm1.Button2Click(Sender: TObject);
var
TThread:time;
begin
TThread.Terminate;
TThread.free;
end;end.线程:
unit Unit2;interfaceuses
Classes,Windows, Forms;type
time = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;implementation
procedure time.Execute;
var
i:integer;
begin
i:=0;
while not Terminated do
begin
Application.MessageBox('提示','你好',MB_OKCANCEL);
sleep(5000);
//if Terminated=true then exit;
end;
end;end.
最好不要用thread 的free的方法,在创建线程的时候把属性 freeonterminate 设置为 true
同样类的命名用time也不是很合适,一般对于线程类的命名用如TTimeThread来命名的觉得会合适一些,至少其它的人一看就懂