H
*HelloWorld*
Unregistered / Unconfirmed
GUEST, unregistred user!
我初学线程,做了这样一个例子。主要目的是想在主界面调用线程(TNewThread)的Create()
之前先做个参数的判断。如果达到某一条件,则设置Suspended为false,激活该线程的Execute()
方法。如果达不到这个条件,则不激活该线程。
主界面的相关代码很简单:
procedure TForm1.Button1Click(Sender: TObject);
var
; NewThread:TNewThread;
begin
; ; //BeforeCreate是我自定义的,用于判断是否激活Execute()
;//向BeforeCreate传出的参数是个integer,用于判断条件是否符合
; NewThread:=TNewThread.BeforeCreate(strtoint(edit1.text));
end;
线程的相关代码如下:
unit Unit2;
interface
uses
; Classes,dialogs,unit1;
type
; TNewThread = class(TThread)
; private
; ; procedure GiveSign;
; ; { Private declarations }
; protected
; ; procedure Execute; override;
; published
; ; constructor BeforeCreate(Value:integer);
; end;
implementation
constructor TNewThread.BeforeCreate(value:integer);
begin
; if value>5 then //只有参数大于5时,才激活该线程
; begin
; ; inherited Create(true);
; ; FreeOnTerminate:=true;
; ; Suspended:=false;
; end
; else
; ; showmessage('thread will not be created');
end;
procedure TNewThread.Execute;
begin
; if Terminated=false then
; ; synchronize(GiveSign);//激活线程,并在主界面中做出反应
end;
procedure TNewThread.GiveSign ;
begin
; form1.label1.caption:='New thread procedure GiveSign called!';
end;
end.
现在的问题是,当参数大于5时,程序运行正确。但小于等于5时却报错,说“Thread Error:句柄无效。(6)”。
请问这是为什么?按理说这时线程还没有被激活呀?
之前先做个参数的判断。如果达到某一条件,则设置Suspended为false,激活该线程的Execute()
方法。如果达不到这个条件,则不激活该线程。
主界面的相关代码很简单:
procedure TForm1.Button1Click(Sender: TObject);
var
; NewThread:TNewThread;
begin
; ; //BeforeCreate是我自定义的,用于判断是否激活Execute()
;//向BeforeCreate传出的参数是个integer,用于判断条件是否符合
; NewThread:=TNewThread.BeforeCreate(strtoint(edit1.text));
end;
线程的相关代码如下:
unit Unit2;
interface
uses
; Classes,dialogs,unit1;
type
; TNewThread = class(TThread)
; private
; ; procedure GiveSign;
; ; { Private declarations }
; protected
; ; procedure Execute; override;
; published
; ; constructor BeforeCreate(Value:integer);
; end;
implementation
constructor TNewThread.BeforeCreate(value:integer);
begin
; if value>5 then //只有参数大于5时,才激活该线程
; begin
; ; inherited Create(true);
; ; FreeOnTerminate:=true;
; ; Suspended:=false;
; end
; else
; ; showmessage('thread will not be created');
end;
procedure TNewThread.Execute;
begin
; if Terminated=false then
; ; synchronize(GiveSign);//激活线程,并在主界面中做出反应
end;
procedure TNewThread.GiveSign ;
begin
; form1.label1.caption:='New thread procedure GiveSign called!';
end;
end.
现在的问题是,当参数大于5时,程序运行正确。但小于等于5时却报错,说“Thread Error:句柄无效。(6)”。
请问这是为什么?按理说这时线程还没有被激活呀?