线程的创建如下:
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不成功.
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不成功.
正确:
constructor th1.create;
begin
inherited Create(true);
FreeOnterminate := true;
end;
之后点击按钮8或按钮9时b变量已经是无效的资源了
constructor th1.create;
begin
inherited Create(False);
FreeOnterminate := True;
end; 2、Execute-SetName-RaiseException()顺利地产生一个异常!楼主还是搜索“TThread”看看别人的例子先