请问如何将SakMail控件改成多线程的(200分)(200分)

  • 主题发起人 主题发起人 www
  • 开始时间 开始时间
W

www

Unregistered / Unconfirmed
GUEST, unregistred user!
我在执行sakpop1.connect,sakpop1.login时,系统没有响应,一段时间后
等connect成功后才会响应事件,请问如何解决?
能否将控件改成多线程的?
 
为什么要改控件?你在线程里调用sakpop1.connect、sakpop1.login不好么?
不过,我没能找到sakpop3的timeout属性,想设置超时也设不了。
 
在function TSakPOP.FReceiveTextFromSocket: string;中改一改,
加入application.processmessage.
 
不知哪一位下载了唐晓锋的Coolmail,他的是怎么做的?
 
hehe,他还没有改完所以他不公开他的代码呀
 
这个问题还没有结束呢,我以前的说法是错误的,呵呵。光光把它
放到单独的进程中是没有用的。按wuyi的说法也不行,因为它是死
在FSocket.Open;上,而不是在接受信息的过程中。这样还是没法
设置processmessage。
 
你应该使用一个线程方式工作的socket元件。比如dwinsock,我以前用他工作的
很好,不会想用delphi的socket元件一样open就象死机。当然你也可以用delphi
的socket元件的线程方式工作,不过好象很麻烦哦。
:我觉得delphi对线程支持的不好。一旦要用线程了,几乎很多东西都能用不了,
而且很多东西都要自己做。
 
把控件用线程包装起来呀.
TSockThread = class(TThread)
SakMail1: TSakMail;
...
public
constructor Create(IP, Port:string;Resume:boolean);
end;

constructor TsockThread.Create(IP, Port:string;Resume:boolean);
begin
Inherited Create(resume);
SakMail:=TSakMail.Create;
//调用参数参考它本身的create方法
SakMail.RemoteHost:=IP;
//属性名称可能不对
SakMail.RemotePort:=Port;
//属性名称可能不对, 数据类型可能不对
end;

procedure TSockThread.Execute;
begin
//add what you want todo
here
// rememberdo
n't exit this procedure until
// close socket or terminate connection
// because exit this procedure means close thread
end;

end;

简单地, 就是从菜单中new一个thread, 然后修改对应的代码
 
IKnow:呵呵,我就是这么用的,看来是Sakmail的问题,用TNMSMTP就没有这
个问题。所以我只好重新用TNMSMTP了。
 
多人接受答案了。
 
后退
顶部