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 its 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)