[plt-scheme] High precision timing and MrEd/OSX
At Wed, 22 Dec 2004 11:13:58 +1100, "Rohan Drape" wrote:
> The module is used to implement a scheduler. When a new item is
> added to the front of the schedule, high-precision-time:set-timer
> is called with the interval to the new entry. The setitimer
> semantics allow the timer to be reset by subsequent calls. (The
> scheduler has an epsilon value to avoid rescheduling below the
> timing threshold of the system.)
>
> I don't see how sleep by itself can be made to work efficiently
> in this scenario?
I see that `sleep' doesn't work, but maybe `sync' (formerly known as
`object-wait-multiple') with either a timeout or an alarm event,
combined with a channel to receive a revised timeout?
In any case, it occurs to me that your signal handler could just call
scheme_signal_received() to solve the main problem. As the function
name suggests, I've had to deal with this problem before, so I should
have remembered the solution earlier. I should also remember to
document it in _Inside MzScheme_.
I still worry that it's not safe to post a MzScheme semaphore from a
signal handler, though. You could avoid this problem by defining
something that is simpler than a semaphore (from the MzScheme
scheduler's perspective). You would have to define a constructor and a
`wait' function, where the latter blocks using scheme_block_until().
The scheduler will poll a function that you provide to
scheme_block_until().
Matthew