以下是我自己写的MyThread.pas ,运行时出现了两个问题:
1.程序执行到Synchronize(InitEdit);就停在此处不动作了!
2.若把Synchronize(InitEdit);注释掉,则界面上的Edit内容没有任何改变。请各位告知,先谢了!
unit MyThread;//MyThread.pasinterfaceuses
Windows, SysUtils,Classes,StdCtrls,Dialogs;type
TMyThread = class(TThread)
private
{ Private declarations }
ED:TEdit;
procedure InitEdit; //初始化Edit
procedure UpdateEdit; //修改Edit
protected
procedure Execute; override;
published
constructor CreateIt(ED:TEdit);
destructor Destroy;override;
end;implementationconstructor TMyThread.CreateIt(ED:TEdit);
begin
inherited Create(false);
FreeOnTerminate := true; Synchronize(InitEdit);-------1.执行到此句出错,程序停在此处不动作了! Suspended:=false;
end;
//--------------------------------------------------------------------
procedure TMyThread.InitEdit; //初始化Edit
begin
ED.Text:='';
end;
//--------------------------------------------------------------------
procedure TMyThread.UpdateEdit; //修改Edit
var CostTime:integer;
StartTicker,EndTicker:integer;
i,j:integer;
begin StartTicker := GetTickCount;
i:=0;
for i:=0 to 1000 do
begin
CostTime:=GetTickCount-StartTicker;
ED.Text:=IntToStr(CostTime);------2.此处出错!
//为何界面上的Edit1的内容没有任何改变?
end;end;
//--------------------------------------------------------------------
procedure TMyThread.Execute;
begin
Synchronize(UpdateEdit);end;
//--------------------------------------------------------------------
destructor TMyThread.Destroy;
begin
PostMessage(Form1.Handle,wm_ThreadDoneMsg,self.ThreadID,0);
inherited destroy;
end;end.
1.程序执行到Synchronize(InitEdit);就停在此处不动作了!
2.若把Synchronize(InitEdit);注释掉,则界面上的Edit内容没有任何改变。请各位告知,先谢了!
unit MyThread;//MyThread.pasinterfaceuses
Windows, SysUtils,Classes,StdCtrls,Dialogs;type
TMyThread = class(TThread)
private
{ Private declarations }
ED:TEdit;
procedure InitEdit; //初始化Edit
procedure UpdateEdit; //修改Edit
protected
procedure Execute; override;
published
constructor CreateIt(ED:TEdit);
destructor Destroy;override;
end;implementationconstructor TMyThread.CreateIt(ED:TEdit);
begin
inherited Create(false);
FreeOnTerminate := true; Synchronize(InitEdit);-------1.执行到此句出错,程序停在此处不动作了! Suspended:=false;
end;
//--------------------------------------------------------------------
procedure TMyThread.InitEdit; //初始化Edit
begin
ED.Text:='';
end;
//--------------------------------------------------------------------
procedure TMyThread.UpdateEdit; //修改Edit
var CostTime:integer;
StartTicker,EndTicker:integer;
i,j:integer;
begin StartTicker := GetTickCount;
i:=0;
for i:=0 to 1000 do
begin
CostTime:=GetTickCount-StartTicker;
ED.Text:=IntToStr(CostTime);------2.此处出错!
//为何界面上的Edit1的内容没有任何改变?
end;end;
//--------------------------------------------------------------------
procedure TMyThread.Execute;
begin
Synchronize(UpdateEdit);end;
//--------------------------------------------------------------------
destructor TMyThread.Destroy;
begin
PostMessage(Form1.Handle,wm_ThreadDoneMsg,self.ThreadID,0);
inherited destroy;
end;end.
程序还是停在Synchronize(InitEdit);就不动作了,请再帮我看看吧!谢谢!type
TMyThread = class(TThread)
private
{ Private declarations }
ED_T:TEdit;*********增加了对象的成员变量**********
procedure InitEdit
procedure UpdateEdit;
protected
procedure Execute; override;
published
constructor CreateIt(ED:TEdit);***过程的局部参数变量保持不变***
destructor Destroy;override;
end;implementation
uses Unit_TwoThread;
//------------------------------------------------------------------------------
constructor TMyThread.CreateIt(ED:TEdit);
var a1:String;
begin
inherited Create(true);
FreeOnTerminate := true;
a1 := ED.Text;---------------当程序执行到此处,a1='Edit1';说明参数传递成功了。
ED_T := ED;
Synchronize(InitEdit););-----但执行到此句,程序仍停在此处不动作了!
Suspended:=false;
end;
//------------------------------------------------------------------------------
procedure TMyThread.InitEdit; //初始化Edit
begin
ED_T.Text := '11';
end;