请说具体点 最好是源码

解决方案 »

  1.   

    用线程对象的create就可以执行
    用suspend挂起一个线程
    挂起的线程用resume恢复执行
    改变terminated属性值可以结束线程(在execute过程中判断其值)
      

  2.   

    停止一个线程:
    interfacetype
      Txyz = class(TThread)
      published
        procedure Execute; override;
      end;var
      XYZThread: Txyz;implementationprocedure Txyz.Execute;
    begin
      while True do 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.
      

  3.   

    CreateThread来创建一个线程;unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        UsedThread: TButton;
        NoUsedThread: TButton;
        procedure UsedThreadClick(Sender: TObject);
        procedure NoUsedThreadClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.UsedThreadClick(Sender: TObject);
    var
      hThread:Thandle;//定义一个句柄
      ThreadID:DWord;
    begin
    //创建线程,同时线程函数被调用
      hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);
      if hThread=0 then
      messagebox(Handle,'Didn'tCreateaThread',nil,MB_OK);
    end;
    procedure TForm1.NoUsedThreadClick(Sender: TObject);
    begin
      MyThreadfunc(nil);
      //没有创建线程时,直接调用线程函数
    end;
    function MyThreadFunc(P:pointer):Longint;stdcall;
    //线程函数
    var
      i:integer;
      DC:HDC;
      S:string;
    begin
      DC:=GetDC(Form1.Handle);
      for i:=0 to 100000 do begin
      S:=Inttostr(i);
      Textout(DC,10,10,Pchar(S),length(S));
    end;
      ReleaseDC(Form1.Handle,DC);
    end;end.