Patrick Wong wrote: > Thanks for your advice. > > Console program does not have message pump by default. I built a simple > function to peek messages in the following way: > > void __fastcall PumpMessages() > { > MSG Msg; > unsigned short TimeTick = 0; > > while(TimeTick < 50) > { > if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) > { > /* Dispatch the message. */ > DispatchMessage(&Msg); > } /* End of PeekMessage while loop. */ > else > { > /* if there is no message to process, */ > /* then sleep for a while to avoid tight */ > /* looping */ > Sleep(100); > /* Increment time tick to allow quiting */ > /* the loop anyway upon times out */ > TimeTick++; > } > } > }
Not good. Use GetMessage() instead of PeekMessage(), don't call sleep. GetMessage waits for messages to be placed in the queue before it returns. Arno Garrels > > Not a good design but anyway the events can be triggered now when I call > the function. > > Problem now is when I call SmtpCli->Data(), after the From, To, Subject, > Content-type stuff are posted the function relies on the > SmtpClientGetData event handler to post mail body line by line. In my > case since the message loop function can only be called after the SmtpCli- > >Data() returned, therefore the MsgLine points to null when being > referenced inside SmtpCli->Data(). Is there any other way to set the > mail body prior to calling Data()? > > I also note in the SmtpProt.pas there is a derived class TSyncSmtpCli. > Does this class support blocked operations which are not message-based? > Is there any example in using this derivative? > > Thanks and regards, > Patrick -- 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