Thread

继承: RefCounted < Object

进程中的执行单元。

描述

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

警告:

为确保正确清理而不会崩溃或死锁,当Thread的引用计数达到零并因此被销毁时,必须满足以下条件:

-它不得锁定任何Mutex对象。

-它不能等待任何Semaphore对象。

-wait_to_finish()应该被调用。

方法

String

get_id() const

bool

is_alive() const

bool

is_started() const

void

set_thread_safety_checks_enabled(enabled: bool) 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(enabled: bool) static 🔗

设置引擎通常在某些类(例如Item)的方法中执行的线程安全检查是否应该发生在当前线程之上

对于每个线程,默认值是它们被启用(就像使用enabledtrue调用一样)。

这些检查是保守的。这意味着只有在引擎能够保证这种安全性的情况下,他们才会成功地考虑调用线程安全(因此允许它发生)。

因此,在某些情况下,用户可能希望禁用它们(enabledfalse)以再次允许某些操作。通过这样做,用户有责任确保那些受引擎保护的对象的线程安全(例如,通过使用Mutex)。

注:这是发动机的高级用法,建议您只有在知道自己在做什么且没有更安全的方法的情况下才使用它。

注意:这对于在任意Thread对象上运行的脚本或提交给WorkerThreadPool的任务很有用。它不适用于在Item组处理期间运行的代码,其中检查将始终执行。

注意:即使在WorkerThreadPool任务中禁用了检查的情况下,也没有必要在最后重新启用它们。引擎会这样做。


Error start(callable: Callable, priority: Priority = 1) 🔗

启动一个新的调用callableThread

如果该方法接受一些参数,您可以使用Callable.bind()传递它们。

Threadpriority可以通过从Priority枚举传递一个值来更改。

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


Variant wait_to_finish() 🔗

加入Thread并等待它完成。返回传递给start()Callable的输出。

应该在您想要检索从Thread调用的方法返回的值时或在释放包含Thread的实例之前使用。

要确定是否可以在不阻塞调用线程的情况下调用它,请检查is_alive()是否为false