The meaning of "the mouse" in 2.0

Dar Scott dsc at swcp.com
Wed Jul 2 16:33:00 EDT 2003


On Wednesday, July 2, 2003, at 02:15 PM, Jim Hurley wrote:

> I am curious about this change in the meaning of "the mouse" in Run 
> Rev 2.0

 From 'What's New.txt' that came with my download:

      - The "mouse" function now reports the state
      of the mouse button at the moment the function
      is called. Formerly, this function reported
      whether the mouse button had been pressed since
      the current handler started. (In general, it is
      recommended to handle the "mouseDown", "mouseRelease",
      and "mouseUp" messages rather than check the state of
      the "mouse" in a handler.)

>
> In the past the following staple from HC:
>
> on mouseDown
>   repeat while the mouse is down
>     set the loc of me to the mouseLoc
>   end repeat
> end mouseDown
>
> was not only frowned upon because it exhausted the CPU,  but, at least 
> on the Mac, there was an intermittent bug in the engine which caused 
> the mouse to stick to the button even after a MouseUp.
> Is the bug gone?

Whether it be bug or not, the behavior is not the same.


> Is there some way in  which we can experiment with Mouse down, 
> mouseClick etc. to see  how a handler consumes CPU time using the 
> ability of the debugger in RR 2.0 to display messages? For example I 
> was curious to see how mouseclick compared with mouse is down.

CPU Monitor

On my OS X I can use CPU Monitor.  I have two processors so it shows 
two meters.

With the above function, usage jumps so that the total of the two 
meters is 100% of one processor.  Either one is max'd and the other is 
minimal or both are about half way.

However, this loop is not the same:

on mouseDown
   repeat while the mouse is down
     set the loc of me to the mouseLoc
     wait 20 milliseconds
   end repeat
end mouseDown

This usually barely shows on either meter but will sometimes peak at 
50% of one processor.  Changing the delay to .1 seconds makes the 
handler not show up at all on the meters.  The drag is a little jerky 
at .1 s, but is quite acceptable on my computer.

I think there is a lesson here.  Maybe it is the #3 missing from my 
list.

3.
Use wait in tight polling loops.  If you just have to use a loop.  This 
might apply to other loops such as a read from a serial port.  If you 
just have to use a loop.  Leave out the wait and you consume too much 
CPU.

If you don't have this utility you can build a standalone that, uh, 
does something clever.

Dar Scott




More information about the use-livecode mailing list