Documentation
¶
Overview ¶
A unit of execution in a process. Can run methods on [Object]s simultaneously. The use of synchronization via [Mutex] or [Semaphore] is advised if working with shared objects. Warning: To ensure proper cleanup without crashes or deadlocks, when a [Thread]'s reference count reaches zero and it is therefore destroyed, the following conditions must be met: - It must not have any [Mutex] objects locked. - It must not be waiting on any [Semaphore] objects. - Instance.WaitToFinish should have been called on it.
Index ¶
- func SetThreadSafetyChecksEnabled(enabled bool)
- type Advanced
- type Any
- type Expanded
- type Extension
- type ID
- type Instance
- func (self Instance) AsObject() [1]gd.Object
- func (self Instance) AsRefCounted() [1]gd.RefCounted
- func (self Instance) AsThread() Instance
- func (self Instance) GetId() string
- func (self Instance) ID() ID
- func (self Instance) IsAlive() bool
- func (self Instance) IsStarted() bool
- func (self *Instance) SetObject(obj [1]gd.Object) bool
- func (self Instance) Start(callable func()) error
- func (self Instance) Virtual(name string) reflect.Value
- func (self Instance) WaitToFinish() any
- type Priority
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func SetThreadSafetyChecksEnabled ¶
func SetThreadSafetyChecksEnabled(enabled bool)
Sets whether the thread safety checks the engine normally performs in methods of certain classes (e.g., [Node]) should happen on the current thread. The default, for every thread, is that they are enabled (as if called with 'enabled' being true). Those checks are conservative. That means that they will only succeed in considering a call thread-safe (and therefore allow it to happen) if the engine can guarantee such safety. Because of that, there may be cases where the user may want to disable them ('enabled' being false) to make certain operations allowed again. By doing so, it becomes the user's responsibility to ensure thread safety (e.g., by using [Mutex]) for those objects that are otherwise protected by the engine. Note: This is an advanced usage of the engine. You are advised to use it only if you know what you are doing and there is no safer way. Note: This is useful for scripts running on either arbitrary [Thread] objects or tasks submitted to the [WorkerThreadPool]. It doesn't apply to code running during [Node] group processing, where the checks will be always performed. Note: Even in the case of having disabled the checks in a [WorkerThreadPool] task, there's no need to re-enable them at the end. The engine will do so.
Types ¶
type Advanced ¶
type Advanced = class
Advanced exposes a 1:1 low-level instance of the class, undocumented, for those who know what they are doing.
type Expanded ¶
type Extension ¶
Extension can be embedded in a new struct to create an extension of this class. T should be the type that is embedding this Extension
func (*Extension[T]) AsRefCounted ¶
func (self *Extension[T]) AsRefCounted() [1]gd.RefCounted
type ID ¶
ID is a typed object ID (reference) to an instance of this class, use it to store references to objects with unknown lifetimes, as an ID will not panic on use if the underlying object has been destroyed.
type Instance ¶
Instance of the class with convieniently typed arguments and results.
var Nil Instance
Nil is a nil/null instance of the class. Equivalent to the zero value.
func (Instance) AsRefCounted ¶
func (self Instance) AsRefCounted() [1]gd.RefCounted
func (Instance) GetId ¶
Returns the current [Thread]'s ID, uniquely identifying it among all threads. If the [Thread] has not started running or if Instance.WaitToFinish has been called, this returns an empty string.
func (Instance) IsAlive ¶
Returns true if this [Thread] is currently running the provided function. This is useful for determining if Instance.WaitToFinish can be called without blocking the calling thread. To check if a [Thread] is joinable, use Instance.IsStarted.
func (Instance) IsStarted ¶
Returns true if this [Thread] has been started. Once started, this will return true until it is joined using Instance.WaitToFinish. For checking if a [Thread] is still executing its task, use Instance.IsAlive.
func (Instance) Start ¶
Starts a new [Thread] that calls 'callable'. If the method takes some arguments, you can pass them using [Instance.Callable.Bind]. The 'priority' of the [Thread] can be changed by passing a value from the Priority enum. Returns [Ok] on success, or [ErrCantCreate] on failure.
func (Instance) WaitToFinish ¶
Joins the [Thread] and waits for it to finish. Returns the output of the [Callable] passed to Instance.Start. Should either be used when you want to retrieve the value returned from the method called by the [Thread] or before freeing the instance that contains the [Thread]. To determine if this can be called without blocking the calling thread, check if Instance.IsAlive is false.