Thread
繼承: RefCounted < Object
程序中的執行單元。
說明
程序中的執行單元。可以同時運作不同 Object 上的方法。如果使用共用物件,建議通過 Mutex 或 Semaphore 進行同步。
注意:如果程式碼在執行緒中運作,中斷點不會中斷。這是 GDScript 除錯器的目前限制。
警告:
為了確保能夠正確清理,避免當機和鎖死,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。