[squeak-dev] Delay time question

John M McIntosh johnmci at smalltalkconsulting.com
Thu Feb 28 05:17:09 UTC 2008


On Feb 27, 2008, at 9:50 PM, Robert F. Scheer wrote:

> Time millisecondsToRun: [1000 timesRepeat: [(Delay forMilliseconds:  
> 10)
> wait]]  13405
>
> Time millisecondsToRun: [10000 timesRepeat: [(Delay forMilliseconds:  
> 1)
> wait]]  45728

For the curious the os-x carbon vm does

Time millisecondsToRun: [1000 timesRepeat: [(Delay forMilliseconds:  
10) wait]]  10196

Time millisecondsToRun: [10000 timesRepeat: [(Delay forMilliseconds:  
1) wait]]  100916

The place you need to look at is your platform's

int ioRelinquishProcessorForMicroseconds(int microSeconds) {
	/* This operation is platform dependent. 	 */


Yes very platform dependent, and VM flavour dependent.

When you do the code above you really are saying gee let's sleep alot.  
Then ioRelinquishProcessorForMicroseconds
runs to judge when next best to wake up to service the end of the  
Delay.  Also on unix if  the operating system says the increment for  
process switch
is oh 10 milliseconds then why you cannot actually sleep for 1 ms.

Time to break out the debugger and your source code reader and  
carefully examine what ioRelinquishProcessorForMicroseconds()
is doing.

In the far past we would just put the VM to sleep for 10 ms or 1 ms,  
but a few years back I changed that to put the vm to sleep upto the  
next point where it needed to wake up (we know that because we know at  
what time delays will trigger in the future). Tempering that is code  
that aborts the sleep if a keyboard/file handle/someting interrupt  
comes in, so  that can be serviced right away.

--
= 
= 
= 
========================================================================
John M. McIntosh <johnmci at smalltalkconsulting.com>
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
= 
= 
= 
========================================================================





More information about the Squeak-dev mailing list