程序中有1个按扭
按下按扭后激活1个线程
在次按下这个按扭
就结束线程
这样怎么做,关键就是怎么结束这个线程

解决方案 »

  1.   

    在线程中循环判断Terminated的值是否为True这样结束线程只需要设置Terminated的值就行了这是比较安全的做法或者用API TeminateThread 不推荐此方法
      

  2.   

    线程结果可以放在程序退出时,
    可以用Suspend,Resume控制线程的执行与否.
      

  3.   


      case WaitForSingleObject(线程句柄,1) of   
              WAIT_OBJECT_0:ShowMessage('线程存在   且正在运行');   
              WAIT_TIMEOUT:ShowMessage('线程存在   且暂时没有运行');   
              WAIT_FAILED   :ShowMessage('无效Handle   ');   
          end;  
    根据线程的状态,对线程进行相关的操作,如果是WAIT_OBJECT_0,那么就结束线程
    可以使用ExitThread结束线程,或者使用suspended挂起线程
      

  4.   

    你是用delphi的线程类来做的吧...type
      TTestThread=class(TThread)
        protected
          procedure Execute;override;
      end;  TForm19 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        FThread:TThread;
      end;var
      Form19: TForm19;implementation{$R *.dfm}procedure TForm19.btn1Click(Sender: TObject);
    begin
      if FThread<>nil then
        FreeAndNil(FThread)
        else
          FThread:=TTestThread.Create(False);
    end;{ TThread }procedure TTestThread.Execute;
    begin
      inherited;
      while not Terminated do
      begin
        //你要做的事
        Sleep(100);
      end;
    end;
      

  5.   

    我想将线程类写在没有Form的pas单元里,怎么写啊?我写了后,总体是没声明线程类。
      

  6.   

    File -> New -> Others -> Thread object
    :)
      

  7.   

    http://download.csdn.net/source/1147081一个多线程和线程同步的例子
      

  8.   

    没有资源分了留下你的Email地址,抽空发给你!
      

  9.   

    unit Unit7;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm7 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  TMyThread = class(TThread)
        private
          FFormCaption: String;
          procedure UpdateTime;
          procedure GetFormCaption;
          procedure ResetFormCaption;
        protected
          procedure Execute;override;
      end;
    var
      Form7: TForm7;  TestThread: TMyThread = Nil;
    implementation{$R *.dfm}
    procedure TMyThread.UpdateTime;
    begin
      //更新窗体的标题栏显示当前时间
      Form7.Caption := FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz', Now);
    end;procedure TMyThread.GetFormCaption;
    begin
      //取得窗体的标题栏内容并保存下来
      FFormCaption := Form7.Caption;
    end;procedure TMyThread.ResetFormCaption;
    begin
      //恢复窗体的标题栏内容
      Form7.Caption := FFormCaption ;
    end;procedure TMyThread.Execute;
    begin
      //保存
      Synchronize(GetFormCaption);
      while Not Terminated do begin
        //更新
        Synchronize(UpdateTime);
        //小停一秒
        Sleep(1000);
      end;
      //结束时恢复
      Synchronize(ResetFormCaption);
    end;procedure TForm7.Button1Click(Sender: TObject);
    begin
      if TestThread = Nil then begin
        //线程不存在则创建
        TestThread := TMyThread.Create(false);
      end else begin
        //线程存在则停止
        TestThread.FreeOnTerminate := true;
        TestThread.Terminate;
        TestThread := Nil;
      end;
    end;end.
      

  10.   

    非常感谢 unsigned,关于线程的创建,困扰了我不少日子,今天看到你的例子,一下子明白了,呵呵,非常感谢~~~