Did you know ... Search Documentation:
timeout.pl
PublicShow source

Re-exported predicates

The following predicates are exported from this file while their implementation is defined in imported modules or non-module files loaded by this module.

Source time_out(:Goal, +Time_ms, -Result) is nondet
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.