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
。