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

A unit of execution in a process. Can run methods on Objects simultaneously. The use of synchronization via Mutex or Semaphore is advised if working with shared objects.

Warning: To ensure proper cleanup without crashes or deadlocks, when a Thread's reference count reaches zero and it is therefore destroyed, the following conditions must be met:

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.