timeoutsmlTimeout.timeout : real -> ('a -> 'b) -> 'a -> 'b
Interrupts a function f after a time limit.
In case the limit is reached, the exception FunctionTimeout is raised, otherwise it behaves in the same way as a call to âfâ on its argument.
Fails when the call to f exceeds the time limit or if
f fails.
> load "smlTimeout"; open smlTimeout;
val it = (): unit
> timeout 0.1 (fn (x:int) => (raise Match):int) 5;
Exception- Match raised
> timeout 0.2 OS.Process.sleep (Time.fromReal 2.0);
Exception- FunctionTimeout raised
> timeout 1.0 (fn x => x) 5;
val it = 5: int
Relies on a conditional variable to decide if and when to send an
Interrupt signal to the worker thread in which the function
f is called. In the case an interrupt is needed, a bit of
time is given to the function f to catch the Interrupt and
return a result. This last step has been implemented with a busy waiting
loop that has experimentally been determined to be more efficient than
relying on an additional condition variable.