线程的创建如下:
unit th1pas;
interface
uses
     Classes{$IFDEF MSWINDOWS}, Windows{$ENDIF}, RealDataControl, main;
type
     TH1 = class(TThread)
     private
          procedure SetName;
     protected
          procedure Execute; override;
     public
          constructor create;
     end;implementationconstructor th1.create;
begin
     inherited Create(false);
     FreeOnterminate := true;
end;{$IFDEF MSWINDOWS}
type
     TThreadNameInfo = record
          FType: LongWord; // must be 0x1000
          FName: PChar; // pointer to name (in user address space)
          FThreadID: LongWord; // thread ID (-1 indicates caller thread)
          FFlags: LongWord; // reserved for future use, must be zero
     end;
{$ENDIF}{ TH1 }procedure TH1.SetName;
{$IFDEF MSWINDOWS}
var
     ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
     ThreadNameInfo.FType := $1000;
     ThreadNameInfo.FName := 'Thread1';
     ThreadNameInfo.FThreadID := $FFFFFFFF;
     ThreadNameInfo.FFlags := 0;     try
          RaiseException($406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo);
     except
     end;
{$ENDIF}
end;procedure TH1.Execute;
begin
     SetName;
  { Place thread code here }
    // inc(handmode);
    // SendMessage(Form1.Handle, WM_MyMsg, 0, 0);
end;
end.
调用:var b:th1;procedure TForm1.BitBtn7Click(Sender: TObject);
begin
b:=th1.Create ;
end;procedure TForm1.BitBtn8Click(Sender: TObject);
begin
if not b.Suspended then b.Suspend;
end;procedure TForm1.BitBtn9Click(Sender: TObject);
begin
if b.Suspended then b.Resume;
end;====
有没有 constructor都有错, 在点击按钮8或按钮9时
thread error 错误(6) 或者 thread error(5);
明显是create不成功.

解决方案 »

  1.   

    很明显的错误,你的进程虽然已创建,但并未激活,所以出错了。
    正确:
    constructor th1.create; 
    begin 
         inherited Create(true); 
         FreeOnterminate := true; 
    end; 
      

  2.   

    1、FreeOnterminate属性表示线程停止后是否释放线程对象,而线程是否执行完毕则是看Execute;调用是否完成,明显没有循环调用一次后就被释放了
      之后点击按钮8或按钮9时b变量已经是无效的资源了
    constructor th1.create; 
    begin 
      inherited Create(False); 
      FreeOnterminate := True;
    end; 2、Execute-SetName-RaiseException()顺利地产生一个异常!楼主还是搜索“TThread”看看别人的例子先