一个关于线程的简单问题...(40分)

  • 主题发起人 主题发起人 *HelloWorld*
  • 开始时间 开始时间
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)”。
请问这是为什么?按理说这时线程还没有被激活呀?
 
再补充一下,如果参数小于5,则'thread will not be created'这一句先显示出来,然后
再报错的。
 
后退
顶部