Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Thread

继承: RefCounted < Object

进程中的执行单元。

描述

进程中的执行单元。可以让任意 Object 上的任意方法同时运行。如果使用共享对象,建议通过 MutexSemaphore 进行同步。

警告:

为了确保能够正确清理,避免崩溃和死锁,Thread 的引用计数变为零进行销毁时,必须满足以下条件:

教程

方法

String

get_id ( ) const

bool

is_alive ( ) const

bool

is_started ( ) const

void

set_thread_safety_checks_enabled ( bool enabled ) static

Error

start ( Callable callable, Priority priority=1 )

Variant

wait_to_finish ( )


枚举

enum Priority:

Priority PRIORITY_LOW = 0

线程以比正常情况下更低的优先级运行。

Priority PRIORITY_NORMAL = 1

具有标准优先级的线程。

Priority PRIORITY_HIGH = 2

以比正常情况更高的优先级运行的线程。


方法说明

String get_id ( ) const

返回当前 Thread 的 ID,能够在所有线程中唯一标识该线程。如果该 Thread 尚未运行,或者已经调用过 wait_to_finish,则返回空字符串。


bool is_alive ( ) const

如果这个 Thread 当前正在运行,则返回 true。可用于确定调用 wait_to_finish 是否可以不阻塞调用的线程。

要检查 Thread 是否可被并入,请使用 is_started


bool is_started ( ) const

如果此 Thread 已启动,则返回 true。一旦开始,这将返回 true ,直到它使用 wait_to_finish 加入。要检查 Thread 是否仍在执行其任务,请使用 is_alive


void set_thread_safety_checks_enabled ( bool enabled ) static

设置是否应该在当前线程执行线程安全检查,这些检查在一般是在某些类(例如 Node)的方法中进行的。

每个线程的默认值是启用(就像将 true 传给 enabled 调用一样)。

这些检查是保守的。也就是说,只有在引擎能够确保安全时才会认为该调用是线程安全的,检查通过(因此允许进行调用)。

因此,某些情况下用于可能会想要将其禁用(让 enabledfalse),允许某些操作。此时引擎不再保护这些对象的线程安全,(通过使用 Mutex 等方法来)确保线程安全就是用户自己的责任了。

注意:这是引擎的高阶用法。建议只有在你知道自己在做什么,并且没有其他更安全的方法时才使用这个方法。

注意:可用于任意 Thread 对象中执行的脚本,或者提交至 WorkerThreadPool 的任务。Node 分组处理时执行的代码不适用,这种情况下会始终执行检查。

注意:即使是在 WorkerThreadPool 任务中禁用了检查,也不需要在结束后将其重新启用。引擎会帮你去启用。


Error start ( Callable callable, Priority priority=1 )

启动一个调用 callable 的新 Thread

如果该方法需要一些参数,可以使用 Callable.bind 传递它们。

Threadpriority 可以通过传递 Priority 枚举中的值来更改。

成功时返回 @GlobalScope.OK,失败时返回 @GlobalScope.ERR_CANT_CREATE


Variant wait_to_finish ( )

合并该 Thread 并等待其完成。返回传入 startCallable 的输出。

应该在你想要获取该 Thread 所调用的方法的返回值时使用,或者在释放包含该 Thread 的实例前使用。

要确定调用时是否不会阻塞调用线程,请检查 is_alive 是否为 false