Wait 0 doesn't

Jim Hurley jhurley at infostations.com
Mon Apr 28 09:05:01 CDT 2003


This will be of little concern to most, but for me it made a big difference.

I have an application which allows students to program graphical 
solutions to science problems--using  Turtle Graphics.

For some simple problems I need to slow the drawing or it happens so 
quickly that it is impossible for the student to see what is 
happening. And so I introduce into the TG drawing script a "wait 
WaitTime" where WaitTime is a parameter chosen by the student to suit 
the problem.

Now for plotting the solution to Newton's equations of motion for an 
orbiting planet, the waitTime is set equal to zero since the number 
of steps needed to simulate the orbit accurately is relatively large. 
But I found using a wait time of 0  also to be somewhat herky-jerky, 
the planet stutters in its path around the moon.

However, I found if I comment-out the wait line altogether, the 
planetary motion is much faster (140 ticks without the "wait 0" 
rather than 200 ticks with "wait 0") and, more importantly, much 
smoother.

To demonstrate this in a simple example, consider the following 
handlers which do nothing but run through a loop 800 times:

on mouseUP
   repeat 800
     wait 0 millisecond
   end repeat
end mouseUP

The  above takes from 500 to 1000 milliseconds to run. It varies 
widely. (If there are no instructions within the loop, it takes 
between 0 and 1 milliseconds to run the 800 repeats. Maybe the 
compiler is smart enough to realize straight off that it is wasting 
its time.)

However:

on mouseUP
   repeat 800
     myWait 0 millisecond
   end repeat
end mouseUP

on myWait temp
   if temp = 0 then exit myWait
   wait temp milliseconds
end myWait

This version takes between 10 and 11 milliseconds (on my machine). It 
is much faster and much more consistent; all loops take about the 
same time.

This anomaly with "wait 0" is most likely an artifact of the engine, 
since it applies to MC as well as RunRev.

Moral: It takes longer to "wait 0 milliseconds" than it does to 
temporize with:  "if temp = 0 then exit myWait"

Of course it is easy to see why the compiler is not prepared for the 
fool who would program a wait of 0 milliseconds.

Jim



More information about the use-livecode mailing list