The timeout
package, which may be loaded by the query
| ?- use_module(library(timeout)).
contains the predicate:
time_out(:Goal, +Time, ?Result)
call/1
. If computing
any solution takes more than Time milliseconds, process virtual
time, the goal will fail and Result is unified with the atom
time_out
. If the goal succeeds within the specified time
Result is unified with the atom success
. Time must
be a number between (not including) 0 and 2147483647.
time_out/3
is implemented by raising and handling
time_out
exceptions, so any exception handler in the scope of
Goal must be prepared to pass on time_out
exceptions.
The following incorrect example shows what can happen otherwise:
| ?- time_out(on_exception(Q,(repeat,false),true), 1000, Res). Q = time_out, Res = success