Re: [twsocket] processmessages or messagepump
Arno, Arno Garrels wrote: info2004 wrote: How would I implement a timeout? Do I create a timer component within the thread, or is there a more elegant solution? A timer is ok since your thread processes messages already :-) You could, for example, use an integer that is incremented in timer's event handler and reset it to zero when TWSocket receives something. In the timer event handler check that integer. I'll look into the timer solution then. But first.Holiday. Thanks for your help. Regards, Andy -- Arno Garrels [TeamICS] http://www.overbyte.be/eng/overbyte/teamics.html -- 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
Re: [twsocket] processmessages or messagepump
Francois, and Arno, while not terminated do begin WSocket.MessagePump; // check if I need to do something sleep(100); end; // close it all down Or am I missing the point in the use of the message pump? Yes, you miss something. The code you've done will be very slow at processing events because of the sleep. And it you remove the sleep, it will use all CPU. OK. The solution is simple: you need to use a real message loop. Easy: just call MessageLoop which all TWSocket instances have. To terminate the message loop, you can post a WM_QUIT message when you detect your thread has terminated. If I do: while not terminated do begin WSocket.MessageLoop; // check if I need to do something end; // close it all down Then my understanding from what you have said is that I only get to the // check if I need to do something when a quit is posted. I am running a finite state machine in the execute loop, which marshalls responses, checks timeouts etc. If I don't exit the message loop, I can't do this. Really sorry if I am missing the point on this. Long hours, fried brain. Regards, Andy -- [EMAIL PROTECTED] The author of the freeware multi-tier middleware MidWare The author of the freeware Internet Component Suite (ICS) http://www.overbyte.be -- 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
Re: [twsocket] processmessages or messagepump
Why don't you write your own message pump with GetMessage? This way you can process your custom messages as well. Regards, SZ On Fri, Jul 18, 2008 at 10:08 AM, info2004 [EMAIL PROTECTED] wrote: Francois, and Arno, while not terminated do begin WSocket.MessagePump; // check if I need to do something sleep(100); end; // close it all down Or am I missing the point in the use of the message pump? Yes, you miss something. The code you've done will be very slow at processing events because of the sleep. And it you remove the sleep, it will use all CPU. OK. The solution is simple: you need to use a real message loop. Easy: just call MessageLoop which all TWSocket instances have. To terminate the message loop, you can post a WM_QUIT message when you detect your thread has terminated. If I do: while not terminated do begin WSocket.MessageLoop; // check if I need to do something end; // close it all down Then my understanding from what you have said is that I only get to the // check if I need to do something when a quit is posted. I am running a finite state machine in the execute loop, which marshalls responses, checks timeouts etc. If I don't exit the message loop, I can't do this. Really sorry if I am missing the point on this. Long hours, fried brain. Regards, Andy -- [EMAIL PROTECTED] The author of the freeware multi-tier middleware MidWare The author of the freeware Internet Component Suite (ICS) http://www.overbyte.be -- 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 -- 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
Re: [twsocket] processmessages or messagepump
Francois PIETTE wrote: So in execute is it Ok to: while not terminated do begin WSocket.MessagePump; // check if I need to do something sleep(100); end; // close it all down Or am I missing the point in the use of the message pump? Yes, you miss something. The code you've done will be very slow at processing events because of the sleep. And it you remove the sleep, it will use all CPU. You can use this to overcome sleep : // If there are messages in the queue, then do not wait at all, else, wait // as little as possible, so as to avoid 100% CPU usage and still process // as fast as we possibly can. MsgWaitForMultipleObjectsEx(0, pHandles, 1, QS_ALLINPUT, MWMO_ALERTABLE); Obviously, one has to understand message processing in the first place... -- 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
Re: [twsocket] processmessages or messagepump
info2004 wrote: How would I implement a timeout? Do I create a timer component within the thread, or is there a more elegant solution? A timer is ok since your thread processes messages already :-) You could, for example, use an integer that is incremented in timer's event handler and reset it to zero when TWSocket receives something. In the timer event handler check that integer. -- Arno Garrels [TeamICS] http://www.overbyte.be/eng/overbyte/teamics.html -- 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
Re: [twsocket] processmessages or messagepump
Arno, So in execute is it Ok to: while not terminated do begin WSocket.MessagePump; // check if I need to do something sleep(100); end; // close it all down Or am I missing the point in the use of the message pump? Regards, Andy Arno Garrels wrote: info2004 wrote: In my thread (I know, you don't need threads...), in the execute procedure, should I call WSocket.ProcessMessages, or WSocket.MessagePump? TWSocket.ProcessMessages processes pending messages once and returns. You should call TWSocket.MessageLoop instead since it waits for and processes messages in a loop. Sending message WM_QUIT breaks the loop. Do not use TWSocket.ProcessMessages or TWSocket.MessagePump in a loop, that would slow down performance and result in high CPU use. Are they the same? If not, what is the difference? No, TWSocket.MessagePump is a method that either calls Application.ProcessMessages or TWSocket.ProcessMessages depending on define NOFORMS or your custom message pump if event OnMessagePump is assigned. BTW: All this stuff has been moved in ICS v6 to TIcsWndControl. -- Arno Garrels [TeamICS] http://www.overbyte.be/eng/overbyte/teamics.html -- 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
Re: [twsocket] processmessages or messagepump
So in execute is it Ok to: while not terminated do begin WSocket.MessagePump; // check if I need to do something sleep(100); end; // close it all down Or am I missing the point in the use of the message pump? Yes, you miss something. The code you've done will be very slow at processing events because of the sleep. And it you remove the sleep, it will use all CPU. The solution is simple: you need to use a real message loop. Easy: just call MessageLoop which all TWSocket instances have. To terminate the message loop, you can post a WM_QUIT message when you detect your thread has terminated. -- [EMAIL PROTECTED] The author of the freeware multi-tier middleware MidWare The author of the freeware Internet Component Suite (ICS) http://www.overbyte.be -- 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
Re: [twsocket] processmessages or messagepump
info2004 wrote: Arno, So in execute is it Ok to: while not terminated do begin WSocket.MessagePump; // check if I need to do something sleep(100); end; // close it all down Or am I missing the point in the use of the message pump? This is evil, don't do that, but use WSocket.MessageLoop instead, please read my previous message again. -- Arno Garrels Regards, Andy Arno Garrels wrote: info2004 wrote: In my thread (I know, you don't need threads...), in the execute procedure, should I call WSocket.ProcessMessages, or WSocket.MessagePump? TWSocket.ProcessMessages processes pending messages once and returns. You should call TWSocket.MessageLoop instead since it waits for and processes messages in a loop. Sending message WM_QUIT breaks the loop. Do not use TWSocket.ProcessMessages or TWSocket.MessagePump in a loop, that would slow down performance and result in high CPU use. Are they the same? If not, what is the difference? No, TWSocket.MessagePump is a method that either calls Application.ProcessMessages or TWSocket.ProcessMessages depending on define NOFORMS or your custom message pump if event OnMessagePump is assigned. BTW: All this stuff has been moved in ICS v6 to TIcsWndControl. -- Arno Garrels [TeamICS] http://www.overbyte.be/eng/overbyte/teamics.html -- 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
Re: [twsocket] processmessages or messagepump
In my thread (I know, you don't need threads...), in the execute procedure, should I call WSocket.ProcessMessages, or WSocket.MessagePump? Are they the same? If not, what is the difference? No, they are not the same. Have a look at the source code and the comments in the source code. They are very explicit and the source code is simple. Then ask more questions if needed. -- [EMAIL PROTECTED] The author of the freeware multi-tier middleware MidWare The author of the freeware Internet Component Suite (ICS) http://www.overbyte.be -- 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
Re: [twsocket] processmessages or messagepump
Hi again, When I got my grep correct, I found it in WSocket.pas. Looks like they are the same when multithreaded is true. ...Andy info2004 wrote: Hi, In my thread (I know, you don't need threads...), in the execute procedure, should I call WSocket.ProcessMessages, or WSocket.MessagePump? Are they the same? If not, what is the difference? Thanks, Andy -- 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
Re: [twsocket] processmessages or messagepump
info2004 wrote: In my thread (I know, you don't need threads...), in the execute procedure, should I call WSocket.ProcessMessages, or WSocket.MessagePump? TWSocket.ProcessMessages processes pending messages once and returns. You should call TWSocket.MessageLoop instead since it waits for and processes messages in a loop. Sending message WM_QUIT breaks the loop. Do not use TWSocket.ProcessMessages or TWSocket.MessagePump in a loop, that would slow down performance and result in high CPU use. Are they the same? If not, what is the difference? No, TWSocket.MessagePump is a method that either calls Application.ProcessMessages or TWSocket.ProcessMessages depending on define NOFORMS or your custom message pump if event OnMessagePump is assigned. BTW: All this stuff has been moved in ICS v6 to TIcsWndControl. -- Arno Garrels [TeamICS] http://www.overbyte.be/eng/overbyte/teamics.html -- 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