我定义了个线程:
constructor TmyThread.Create(CreateSuspended: Boolean);
begin
    inherited Create(CreateSuspended);
    Priority := TpNormal;
    FreeOnTerminate:=true;
end;procedure TmyThread.Execute;
begin
   showmessage('ok');
end;
然后按button执行它:
procedure TForm1.Button1Click(Sender: TObject);
begin
    TmyThread.Create(false);
end;
多次按button,可对话框只弹出来一次,也就是说为什么这个线程只执行了一次,再按button这个线程就不执行了?

解决方案 »

  1.   

    你在线程中用到线程不安全的VCL,  改成这样
    procedure TmyThread.Execute;
    begin
      Synchronize(Test);
    end;procedure TmyThread.Test;
    begin
      ShowMessage('OK');
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);var testThread:myThread;begin
        testThread:=TmyThread.Create(false);
    end;
      

  3.   

    procedure TmyThread.Execute;
    begin
      { Place thread code here }
      while true do
      begin
        if(Terminated) then exit;//检查线程的退出标志,如果为true,则线程停止
        SynChronize(Update);
        Suspend;
      end;
    end;
    TmyThread.update;
    begin
      showmessage('asdf');
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        TmyThread.resume;
    end;
      

  4.   

    快有个屁用,写错了:(还是DWGZ()说的对
    靠,今天算是载了,我的一世英明呀……