Max Terentiev wrote:
>> Use TSslSmtpCli and call the async methods. Your threads must
>> also implement a message pump or simply call the ICS, built-in,
>> message pump instead (TSslSmtpCli.CtrlSocket.MessageLoop).
> 
> But how to implement message pump if I create many TSmtpCli
> inside TThread ?

Unlike main thread in a Delphi GUI application TThread does not 
processes messages by default.
 
A simple message pump was:

procedure TMyThread.PumpMessages(WaitForMessages: Boolean);
var
  IsMessage : Boolean;
  Msg       : TMsg;
begin
    while True do
    begin      
      if Terminated and WaitForMessage then
         break;
      if WaitForMessages then
         IsMessage := GetMessage(Msg, 0, 0, 0)
      else
         IsMessage := PeekMessage(Msg, 0, 0, 0, PM_REMOVE);

      if not IsMessage then 
         break;
      
      if Msg.hwnd = 0 then // messages posted to the thread
      begin
        if Msg.message = WM_MY_STOP_THREAD_MESSAGE then
        begin
            if not Terminated then
              Terminate;
            break;
        end
        else begin
            TranslateMessage(Msg);
            DispatchMessage(Msg);
        end;
      end
      else begin // messages posted/sent to a window of this thread
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;
    end;
end;

> 
> I must implement loop like this this ?
> 
> for i:=0 to MySmtpCliList_InThisThread.Count-1 do
>   
> TSmtpCli(MyStmpCliList_InThisThread.Items[i]).CtrlSocket.MessageLoop;

No, a single call to start the message loop is enough, for example:

procedure TMyThread.Execute;
begin
  1) Create the TSslSmtpCli objects // **ALWAYS** create and destroy them in 
Execute method
  2) Assign properties and events
  3) Call the first async method (probably Connect or Open) and
     rely on and control program flow from the event handlers!

  PumpMessages(TRUE);
 
  finally
    Free the TSslSmtpCli objects 
end;
 
> 
> What is better - using 20 non-blocking TSmtpCli's inside thread and
> call CtrlSocket.MessageLoop OR using blocking TSyncSmtpCli and call
> Sync methods without MessageLoop ? What is fasten and more efficient ?

Use non-blocking, async methods for this purpose.
 
--

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

Reply via email to