请问如何给我的线程传参数(50分)

  • 主题发起人 主题发起人 咪咪富翁
  • 开始时间 开始时间

咪咪富翁

Unregistered / Unconfirmed
GUEST, unregistred user!
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure sa.execute;
begin
try
freeonterminate:=true;
//线程结束后自动退出内存
if form1.SpeedButton2.top>20 then
repeat
form1.SpeedButton2.top:=form1.SpeedButton2.top-1;
form1.Refresh;
until
form1.SpeedButton2.top=20
else
while form1.SpeedButton2.top<200do
form1.SpeedButton2.top:=form1.SpeedButton2.top+1;
finally
end;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
ywx:=sa.create(false);
end;

end.
初学线程,我写了这么一段程序,我想把speedbutton的名字作为参数传给我的线程
请问该怎么做??
 
procedure sa.execute(speedbutton:tspeedbutton);overload ;
 
to:
weekboy
请你讲得稍微详细点好吗,谢谢了
 
sorry!
published
constructor create(speedbutton:tspeedbutton);
...
constructor create(speedbutton:tspeedbutton);
begin
inherited create(true);
...
end;
...
yourthread:=tyourthread.create(form1.SpeedButton2)
 
自己写一个线程类,
TGetFileInfo = class(TThread)
private
FSpeed:TSpeedbutton;
protected
procedure Execute;
override;
public
constructor CreateGetFile(Speed:TSpeedbutton);
//构造函数
destructor Destroy;override;
//析构函数
end;
contructor TGetFileInfo.CreateGetFile(Speed:TSpeedButton);
begin
inherited Create;
FSpeed:=Speed;
end;
再在线程里用这个Fspeed就可以了,
或者用
TGetFileInfo = class(TThread)
private
protected
procedure Execute;
override;
public
FSpeed:TSpeedbutton;
constructor CreateGetFile(Speed:TSpeedbutton);
//构造函数
destructor Destroy;override;
//析构函数
end;

在启动线程前给这个fspeeD给个值就OK
 
谢谢支持
 
CreateThread()
5个参数, 其中有一个是用一个指针来傳地参数。
记不清了,要查一下。
 
在 {Delphi}/Demos/Threads 中有最好的例程.
 
如果用继承TThread类的方法来建立线程,就和张无忌写的那样传递参数
constructor Create(Speed:TSpeedbutton;...);
如果用Api函数CreateThread建立线程,必须用一个指针来传递参数,
例如:
type
PPara = ^TPara;
TPara = record
para1:integer;
para2:string;
end;
procedure testproc(para:PPara);stdcall;
var
begin
para^.para1和para^.para2访问传递进来的参数
end;
 
var
para:PPara;
ThreadId:dword;
h1:THandle;
begin
para^.para1:=1;
para^.para2:='123';
h1:=createthread(nil,0,@testproc,para,0,threadid);
if h1=0 then
showmessage('error')
else
showmessage('success');
end;
 
很簡單:
只要在你的線程類的Contructor函數中設定幾個參數就可以了.
 
1用构造器传
2在线程中定义一些变量
xxthread.create(true);
给变量赋值
thread.resume
3给线程发消息
 

Similar threads

回复
4
查看
225
咪咪富翁
回复
3
查看
350
迷惘的人
Q
回复
4
查看
356
穿越沦陷的爱
穿
后退
顶部