Most Efficient Timer?

Dave Cragg dcragg at lacscentre.co.uk
Mon Nov 29 06:29:58 EST 2004


On 29 Nov 2004, at 09:11, Richard Gaskin wrote:

> Scott Rossi wrote:

>> Both of the above routines provide the same output.  However, when 
>> viewing
>> the %CPU use on a Mac OSX system with the Activity Monitor, CPU usage 
>> is
>> clearly dependent on the frequency of the "send in" message: with 100
>> milliseconds frequency, the first handler runs at about 15% usage, 
>> and with
>> 50 milliseconds frequency runs at about 30% usage (makes sense).
>> Amazingly, the "wait x with messages" handler runs at less than 1% 
>> usage.
>> And because "with messages" does not block other messages from being 
>> sent,
>> this seems a very efficient way to run a timer.
>> Obviously the above is useful only in situations requiring accuracy 
>> of 1
>> second or less, but at first glance I can't see any drawback to using 
>> this
>> method.  Can you?
>
> None that I can see, but I managed to get myself confused on the 
> issue:  if you only want a time sent once a second, why not just send 
> it in 1 second rather than polling several times a second?
>
I guess Scott was concerned about the smoothness of the time display 
ticking over. If you send every 1 second, and there is something 
holding up message processing, the timer may be late to update. 
Increasing the frequency increases the chance of getting it right (but 
doesn't guarantee it).

One uncertainty about the "wait <condition> with messages" is that it 
isn't documented how frequently the condition is evaluated. I was told 
once that "wait ... with messages" was inefficient because it was 
constantly evaluating the condition. However, this doesn't seem to be 
the case. From some simple testing (calling a function in the 
condition), I find that the time between evaluations varies, ranging 
from about 5 to 256 milliseconds (when no other activity is taking 
place).

So for 1-second accuracy, I don't see any drawbacks.

Cheers
Dave



More information about the use-livecode mailing list