Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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 🔗
如果呼叫該方法的執行緒是主執行緒,則回傳 true。
注意:這是一個靜態方法,與特定的 Thread 物件無關。
如果此 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。