Thread
继承: RefCounted
< Object
A unit of execution in a process.
描述
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. -
wait_to_finish
should have been called on it.
方法
String | get_id ( ) const1 |
bool | is_alive ( ) const1 |
bool | is_started ( ) const1 |
void | set_thread_safety_checks_enabled ( enabled: bool ) static2 |
Error | start ( callable: Callable , priority: Priority = 1 ) |
Variant | wait_to_finish ( ) |
枚举
enum Priority:
Priority PRIORITY_LOW = 0
A thread running with lower priority than normally.
Priority PRIORITY_NORMAL = 1
A thread with a standard priority.
Priority PRIORITY_HIGH = 2
A thread running with higher priority than normally.
方法说明
Returns the current Thread's ID, uniquely identifying it among all threads. If the Thread has not started running or if wait_to_finish
has been called, this returns an empty string.
Returns true
if this Thread is currently running the provided function. This is useful for determining if wait_to_finish
can be called without blocking the calling thread.
To check if a Thread is joinable, use is_started
.
Returns true
if this Thread has been started. Once started, this will return true
until it is joined using wait_to_finish
. For checking if a Thread is still executing its task, use is_alive
.
void
set_thread_safety_checks_enabled ( enabled: bool
) static2
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.
Error start ( callable: Callable
, priority: Priority = 1 )
Starts a new Thread that calls callable
.
If the method takes some arguments, you can pass them using Callable.bind
.
The priority
of the Thread can be changed by passing a value from the Priority enum.
Returns @GlobalScope.OK
on success, or @GlobalScope.ERR_CANT_CREATE
on failure.
Variant
wait_to_finish ( )
Joins the Thread and waits for it to finish. Returns the output of the Callable
passed to 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 is_alive
is false
.
本方法通常需要用户覆盖才能生效。
本方法无副作用,不会修改该实例的任何成员变量。
本方法除了能接受在此处描述的参数外,还能够继续接受任意数量的参数。
本方法用于构造某个类型。
调用本方法无需实例,可直接使用类名进行调用。
本方法描述的是使用本类型作为左操作数的有效运算符。
这个值是由下列位标志构成位掩码的整数。
无返回值。