我是一个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.

解决方案 »

  1.   

    是上面的代码???没大错,都是小问题  TThread : time 应该申请成全局的,至少两个过程可以访问到的,变量名那样命名乍看之下有些奇怪呢
    最好不要用thread 的free的方法,在创建线程的时候把属性 freeonterminate 设置为 true
      

  2.   

    同意上面的意思,实际上你两个按钮操作的是不同的对象实例,两个操作的虽然都叫TThread,但自是却不是来同一个实例声明另外变量命名用的是TThread,这本身是一个类名,就算不是类名,在变量命前加上T一般表示的是类,所以用Thread1或有意义的词语之类的来命名会比较
    同样类的命名用time也不是很合适,一般对于线程类的命名用如TTimeThread来命名的觉得会合适一些,至少其它的人一看就懂