Thread
继承: RefCounted < Object
进程中的执行单元。
描述
进程中的执行单元。可以同时在 Object 上运行方法。如果使用共享对象,建议通过 Mutex 或 Semaphore 进行同步。
警告:为了确保能够正确清理,避免崩溃和死锁,Thread 的引用计数变为零进行销毁时,必须满足以下条件:
它不能有任何已锁定的 Mutex 对象。
它不能在等待任何 Semaphore 对象。
应该已经对其调用过 wait_to_finish()。
教程
方法
get_id() const |
|
is_alive() const |
|
is_main_thread() static |
|
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()。
bool is_main_thread() static 🔗
Returns true if the thread this method was called from is the main thread.
Note: This is a static method and isn't associated with a specific Thread object.
如果此 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。