救命呀!!多线程为啥就要困死我?!救救我吧~~~救救我吧~~(100分)

  • 主题发起人 主题发起人 qin_sir
  • 开始时间 开始时间
Q

qin_sir

Unregistered / Unconfirmed
GUEST, unregistred user!
这是我的程序
unit SendMailThread;

interface

uses
Classes,Dialogs,MailUnit,NewMailUnit,Sysutils;
type
SendMail2Thread = class(TThread)
private
procedure ThreadsSendMail;

protected
procedure Execute; override;
public
Constructor Create(MailMessage:array of OneMail);
end;


implementation

threadvar
Mail:array of OneMail;
constructor SendMail2Thread.Create(MailMessage:array of OneMail);
var
i:integer;
ArrayLength:integer;
begin
FreeOnTerminate:=True;
ArrayLength:=length(MailMessage);
setlength(Mail,ArrayLength);
for i:=0 to ArrayLength-1 do
begin
Mail:=MailMessage;
end;
inherited Create(False);
end;

procedure SendMail2Thread.Execute;
begin
FreeOnTerminate:=True;
Synchronize(ThreadsSendMail);
end;
Procedure SendMail2Thread.ThreadsSendMail;
var i:integer;
begin
for i:=0 to length(Mail)-1 do
begin
MailForm.SendMail(Mail,'202.96.199.133');
end;

end;

end.


单开一个线程没有任何问题,一开多现成就报错!老是弹出OX什么的地址错误!
 
不是吧?又是没人会?!
高手都跑哪里去了?!质疑!
 
把你那个threadvar变量Mail定义成SendMail2Thread 类的一个成员变量看看.
 
to xeen:
是定义成私有变量吗?那和线程变量有什么区别吗?
我测试过,还是报错!
 
to xeen:
是定义成私有变量吗?那和线程变量有什么区别吗?
我测试过,还是报错
 
在CREATE 里面把 inherited Create(False);提到句首试试
 
在创建的时候指定FreeOnTerminate:=True;
把SendMail方法定义在线程体内,试试看。。。。
 
接受答案了.
 
实话说,从你的代码来看你这根本不是多线程,和在窗口里运行没任何区别
 
后退
顶部