Re: [twsocket] processmessages or messagepump

2008-07-19 Thread info2004
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

2008-07-18 Thread info2004
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

2008-07-18 Thread Fastream Technologies
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

2008-07-18 Thread Olivier Sannier
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

2008-07-18 Thread Arno Garrels
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

2008-07-17 Thread info2004
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

2008-07-17 Thread Francois PIETTE
 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

2008-07-17 Thread Arno Garrels
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

2008-07-16 Thread Francois PIETTE
 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

2008-07-16 Thread info2004
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

2008-07-16 Thread Arno Garrels
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