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.

Thread

Eredita: RefCounted < Object

Un unità di esecuzione in un processo.

Descrizione

Un'unità di esecuzione in un processo. Può eseguire metodi sui Object simultaneamente. Si consiglia di utilizzare la sincronizzazione tramite Mutex o Semaphore se si lavora con oggetti condivisi.

Avviso: Per garantire una pulizia corretta senza crash o deadlock, quando il conteggio dei riferimenti di un Thread raggiunge zero e viene quindi distrutto, devono essere soddisfatte le seguenti condizioni:

  • Non deve avere alcun oggetto Mutex bloccato.

  • Non deve essere in attesa di alcun oggetto Semaphore.

  • Si sarebbe dovuto richiamare wait_to_finish() su di esso.

Tutorial

Metodi

String

get_id() const

bool

is_alive() const

bool

is_main_thread() static

bool

is_started() const

void

set_thread_safety_checks_enabled(enabled: bool) static

Error

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

Variant

wait_to_finish()


Enumerazioni

enum Priority: 🔗

Priority PRIORITY_LOW = 0

Un thread in esecuzione con una priorità inferiore al normale.

Priority PRIORITY_NORMAL = 1

Un thread con una priorità normale.

Priority PRIORITY_HIGH = 2

Un thread in esecuzione con una priorità superiore al normale.


Descrizioni dei metodi

String get_id() const 🔗

Restituisce l'ID del Thread attuale, identificandolo in modo univoco tra tutti i thread. Se il Thread non è stato avviato o se è stato chiamato wait_to_finish(), restituisce una stringa vuota.


bool is_alive() const 🔗

Restituisce true se questo Thread sta attualmente eseguendo la funzione fornita. Ciò è utile per determinare se wait_to_finish() può essere chiamato senza bloccare il thread chiamante.

Per verificare se un Thread è unibile, usa 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.


bool is_started() const 🔗

Restituisce true se questo Thread è stato avviato. Una volta avviato, restituirà true finché non verrà unito usando wait_to_finish(). Per controllare se un Thread sta ancora eseguendo la sua attività, usa is_alive().


void set_thread_safety_checks_enabled(enabled: bool) static 🔗

Imposta se i controlli di sicurezza dei thread che il motore esegue normalmente nei metodi di determinate classi (ad esempio, Node) devono essere eseguiti sul thread attuale.

L'impostazione predefinita, per ogni thread, è che siano abilitati (come se fossero chiamati con enabled che è true).

Tali controlli sono prudenti. Ciò significa che riusciranno a considerare una chiamata thread-safe (e quindi consentiranno che venga eseguita) solo se il motore può garantire tale sicurezza.

Per questo motivo, potrebbero esserci casi in cui l'utente potrebbe volerli disabilitare (enabled che è false) per consentire nuovamente determinate operazioni. In questo modo, diventa la responsabilità dell'utente garantire la sicurezza dei thread (ad esempio, tramite Mutex) per quegli oggetti che sono altrimenti protetti dal motore.

Nota: Questo è un utilizzo avanzato del motore. Si consiglia di usarlo solo se si sa cosa si sta facendo e non esiste un modo più sicuro.

Nota: Questo è utile per gli script in esecuzione su oggetti Thread arbitrari o attività inviate al WorkerThreadPool. Non si applica al codice in esecuzione durante l'elaborazione di gruppo dei Node, in cui i controlli saranno sempre eseguiti.

Nota: Anche nel caso in cui i controlli siano stati disabilitati in un'attività del WorkerThreadPool, non è necessario riabilitarli alla fine. Lo farà il motore.


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

Avvia un nuovo Thread che chiama callable.

Se il chiamabile accetta alcuni argomenti, puoi passarli tramite Callable.bind().

Il priority del Thread può essere modificato passando un valore dall'enumerazione Priority.

Restituisce @GlobalScope.OK in caso di successo o @GlobalScope.ERR_CANT_CREATE in caso di fallimento.


Variant wait_to_finish() 🔗

Unisce il Thread e attende che termini. Restituisce il risultato del Callable passato a start().

Dovrebbe essere usato quando si desidera recuperare il valore restituito dal metodo chiamato dal Thread o prima di liberare l'istanza che contiene il Thread.

Per determinare se questo può essere chiamato senza bloccare il thread chiamante, controllare se is_alive() è false.