Hello Markus,

Looks ok at first sight. But wy not create / destroy the component in
the thread's Execute ?

---
Rgds, Wilfried [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
http://www.mestdagh.biz

Sunday, May 13, 2007, 16:25, Markus Humm wrote:

> Hello,

> I've tested one of my ideas for making SmtpCli working for me now.
> I've constructed a thread which will do the sending of the mail and thus
> does a thread attach/detach and has its own message loop.

> It also knows the threadid of the main program so it posts a message to
> it when the thread's execute is done either by successfully sending the
> mail or because some error occured. (okay, I should add the errorcode to
> the message, just  got this idea but okay...).

> The thread also has a Cancel method which sends a special message to the
> thread which also makes it leave his message loop and does a abort on 
> the control socket of the smtpcli and on the smtpcli.

> The one sending the e-mail fires a timer which when occurring will call
> this cancel method. If the mail sending was faster than the timer the 
> timer is freed. I've tested this with a working e-mail server and a 
> wrong host name. Is seemed to work, but I'd like to have some expert's
> opinion if this is good (or at least okay) practice or not, before I'm
> running into severe trouble. I'll slightly enhance it and test it 
> tomorrow at work.

> This is the execute (where mainform is the VCL mainform of the test app.):

> procedure TThreadedMail.Execute;
> var msg:TMsg;
> begin
>    mainform.SmtpCli.ThreadAttach;
>    mainform.SmtpCli.CtrlSocket.MultiThreaded:=true;
>    mainform.SmtpCli.Connect;

>    msg.message:=0;

>    while GetMessage(Msg, 0, 0, 0) do
>    begin
>      if (msg.message = wm_mailcancel) then break;

>      TranslateMessage(Msg);
>      DispatchMessage(Msg);
>    end;

>    if (Msg.message = wm_mailcancel) then
>    begin
>      try
>        mainform.SmtpCli.CtrlSocket.Abort;
>        mainform.SmtpCli.Abort;
>      except
>      end;
>    end;

>    mainform.SmtpCli.ThreadDetach;
>    PostThreadMessage(mainthread, wm_mailende, 0, 0);
> end;

> Greetings

> Markus

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to