This library provides a SICStus compatible implementation of
time-outs. This predicate runs Goal as call/1 and binds Result to
either success
(the answer was produced within Time_ms) or
time_out
(Goal did not terminate within Time_ms). If Goal
succeeds with a choice point, backtracking into it re-applies the
time limit, i.e., each solution gets a Time_ms time limit.
Calls to time_out/3 can be nested. If an outer time out is
triggered first, the inner time out is cancelled using a
time_out(Id)
exception and the outer one binds Result to
time_out
.
- See also
- - alarm/3, call_with_time_limit/2, call_with_inference_limit/3
and thread-based primitives such as thread_signal/2 and
first_solution/3.
- bug
- - Unfortunately, our emulation is not fully compatible with the
SICStus original. Notably, Time is measured in wall-time instead
of virtual CPU time. Virtual CPU time is hard in
threaded-environments. On most systems, you probably need a thread
that measures the CPU usage of the monitored thread.