线程参数传递问题 ( 积分: 100 )

  • 主题发起人 主题发起人 xiyuezhang
  • 开始时间 开始时间
X

xiyuezhang

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi中,线程的参数传递
我在一个unit中对IdMessage 和IdSMTP的相关属性进行赋值
代码:
type
SendEmail = class(TThread)
private
{ Private declarations }
FIdSMTP:TIdSMTP;
FIdMessage:TIdMessage;
protected
public
constructor Create(IdSMTP:TIdSMTP;IdMessage:TIdMessage);
end;

implementation

constructor SendEmail.Create(IdSMTP:TIdSMTP;IdMessage:TIdMessage);
begin
FIdSMTP:=IdSMTP;
FIdMessage:=IdMessage;
inherited Create(False);
FreeOnTerminate:=True;
end;
……
代码:
假如有IdSMTP1,IdMessage1 对它们的属性进行赋值 并且IdSMTP1与服务器建立了连接
然后SendEmail.Create(IdSMTP1;IdMessage1);
那么thread的execute里所使用的IdSMTP,IdMessage都具有之前的属性值吗?
可以解释具体过程吗?
 
delphi中,线程的参数传递
我在一个unit中对IdMessage 和IdSMTP的相关属性进行赋值
代码:
type
SendEmail = class(TThread)
private
{ Private declarations }
FIdSMTP:TIdSMTP;
FIdMessage:TIdMessage;
protected
public
constructor Create(IdSMTP:TIdSMTP;IdMessage:TIdMessage);
end;

implementation

constructor SendEmail.Create(IdSMTP:TIdSMTP;IdMessage:TIdMessage);
begin
FIdSMTP:=IdSMTP;
FIdMessage:=IdMessage;
inherited Create(False);
FreeOnTerminate:=True;
end;
……
代码:
假如有IdSMTP1,IdMessage1 对它们的属性进行赋值 并且IdSMTP1与服务器建立了连接
然后SendEmail.Create(IdSMTP1;IdMessage1);
那么thread的execute里所使用的IdSMTP,IdMessage都具有之前的属性值吗?
可以解释具体过程吗?
 
没看懂你说什么
对象参数传递类似于C++中传递指针
因此SendMail中的IdSMTP,IdMessage和传入的对象(IdSMTP1,IdMessage1)是同一对象
这样好像要注意VCL线程同步问题
(报歉的是ID控件我没用过)
 
可以使用之前的属性
 
实现群发邮件
创建线程之前,对idmessage和idsmtp属性赋值
在线程里面循环发送邮件,有关idmessage和idsmtp的属性值都传给参数了
为什么在发送邮件的过程中会出现这样的错误:
CoremailSys:Error:too many letters during this connect
 
后退
顶部