.. rst-class:: align-right
built-in predicate
.. index:: pair: threaded_exit/1-2; Built-in predicate
threaded_exit(Goal) threaded_exit(Goal, Tag)
Retrieves the result of proving Goal
in a new thread. This predicate
blocks execution until the reply is sent to the :term:`this` message queue
by the thread executing the goal. When there is no thread proving the goal,
the predicate generates an exception. This predicate is non-deterministic,
providing access to any alternative solutions of its argument.
The argument of this predicate should be a variant of the argument of
the corresponding :ref:`threaded_call/1 <predicates_threaded_call_1_2>`
or :ref:`threaded_once/1 <predicates_threaded_once_1_2>` call.
When the predicate argument is subsumed by the threaded_call/1
or
threaded_once/1
call argument, the threaded_exit/1
call will
succeed iff its argument is a solution of the (more general) goal.
The threaded_exit/2
variant accepts a threaded call identifier tag
generated by the calls to the :ref:`threaded_call/2 <predicates_threaded_call_1_2>`
and :ref:`threaded_once/2 <predicates_threaded_once_1_2>` predicates. Tags
shall be regarded as an opaque term; users shall not rely on its type.
Note
This predicate requires a :term:`backend Prolog compiler` providing
compatible multi-threading primitives. The value of the read-only
:ref:`threads <flag_threads>` flag is set to supported
when that
is the case.
threaded_exit(+callable) - zero_or_more threaded_exit(+callable, +nonvar) - zero_or_more
Goal
is a variable:instantiation_error
Goal
is neither a variable nor a callable term:type_error(callable, Goal)
Goal
in the Object
calling context:existence_error(thread, Object)
Tag
is a variable:instantiation_error
threaded_exit(Goal)
threaded_exit(::Goal)
threaded_exit(Object::Goal)
.. seealso:: :ref:`predicates_threaded_call_1_2`, :ref:`predicates_threaded_ignore_1`, :ref:`predicates_threaded_once_1_2`, :ref:`predicates_threaded_peek_1_2`, :ref:`predicates_threaded_cancel_1`, :ref:`predicates_threaded_1`