Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Thread
继承: RefCounted < Object
进程中的执行单元。
描述
进程中的执行单元。可以让任意 Object 上的任意方法同时运行。如果使用共享对象,建议通过 Mutex 或 Semaphore 进行同步。
警告:
为了确保能够正确清理,避免崩溃和死锁,Thread 的引用计数变为零进行销毁时,必须满足以下条件:
必须没有任何上锁的 Mutex 对象。
必须没有在任何 Semaphore 对象上等待。
必须已调用过它的 wait_to_finish()。
教程
方法
get_id() const |
|
is_alive() const |
|
is_started() const |
|
void |
set_thread_safety_checks_enabled(enabled: bool) static |
枚举
enum Priority: 🔗
Priority PRIORITY_LOW = 0
线程以比正常情况下更低的优先级运行。
Priority PRIORITY_NORMAL = 1
具有标准优先级的线程。
Priority PRIORITY_HIGH = 2
以比正常情况更高的优先级运行的线程。
方法说明
返回当前 Thread 的 ID,能够在所有线程中唯一标识该线程。如果该 Thread 尚未运行,或者已经调用过 wait_to_finish(),则返回空字符串。
如果这个 Thread 当前正在运行,则返回 true
。可用于确定调用 wait_to_finish() 是否可以不阻塞调用的线程。
要检查 Thread 是否可被并入,请使用 is_started()。
如果此 Thread 已启动,则返回 true
。一旦开始,这将返回 true
,直到它使用 wait_to_finish() 加入。要检查 Thread 是否仍在执行其任务,请使用 is_alive()。
void set_thread_safety_checks_enabled(enabled: bool) static 🔗
设置是否应该在当前线程执行线程安全检查,这些检查在一般是在某些类(例如 Node)的方法中进行的。
每个线程的默认值是启用(就像将 true
传给 enabled
调用一样)。
这些检查是保守的。也就是说,只有在引擎能够确保安全时才会认为该调用是线程安全的,检查通过(因此允许进行调用)。
因此,某些情况下用于可能会想要将其禁用(让 enabled
为 false
),允许某些操作。此时引擎不再保护这些对象的线程安全,(通过使用 Mutex 等方法来)确保线程安全就是用户自己的责任了。
注意:这是引擎的高阶用法。建议只有在你知道自己在做什么,并且没有其他更安全的方法时才使用这个方法。
注意:可用于任意 Thread 对象中执行的脚本,或者提交至 WorkerThreadPool 的任务。Node 分组处理时执行的代码不适用,这种情况下会始终执行检查。
注意:即使是在 WorkerThreadPool 任务中禁用了检查,也不需要在结束后将其重新启用。引擎会帮你去启用。
Error start(callable: Callable, priority: Priority = 1) 🔗
启动一个调用 callable
的新 Thread。
如果该方法需要一些参数,可以使用 Callable.bind() 传递它们。
Thread 的 priority
可以通过传递 Priority 枚举中的值来更改。
成功时返回 @GlobalScope.OK,失败时返回 @GlobalScope.ERR_CANT_CREATE。
合并该 Thread 并等待其完成。返回传入 start() 的 Callable 的输出。
应该在你想要获取该 Thread 所调用的方法的返回值时使用,或者在释放包含该 Thread 的实例前使用。
要确定调用时是否不会阻塞调用线程,请检查 is_alive() 是否为 false
。