built-in predicate
threaded_once/1-2
ï
Descriptionï
threaded_once(Goal)
threaded_once(Goal, Tag)
Proves Goal
asynchronously using a new thread. Only the first goal
solution is found. The argument can be a message-sending goal. This call
always succeeds. The result (success, failure, or exception) is sent
back to the message queue of the object containing the call
(this).
The threaded_once/2
variant returns a threaded call identifier tag that
can be used with the threaded_exit/2
and threaded_cancel/1 predicates. Tags shall be regarded
as opaque terms; users shall not rely on their type.
Note
This predicate requires a backend Prolog compiler providing
compatible multi-threading primitives. The value of the read-only
threads flag is set to supported
when that
is the case.
Meta-predicate templateï
threaded_once(0)
threaded_once(0, *)
Modes and number of proofsï
threaded_once(@callable) - one
threaded_once(@callable, --nonvar) - one
Errorsï
Goal is a variable:
instantiation_error
Goal is neither a variable nor a callable term:
type_error(callable, Goal)
Tag is not a variable:
uninstantiation_error(Tag)
Examplesï
Prove
Goal
asynchronously in a new thread:threaded_once(Goal)
Prove
::Message
asynchronously in a new thread:threaded_once(::Message)
Prove
Object::Message
asynchronously in a new thread:threaded_once(Object::Message)