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
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:
It must not have any Mutex objects locked.
It must not be waiting on any Semaphore objects.
wait_to_finish() should have been called on it.
Tutorial
Metodi
get_id() const |
|
is_alive() const |
|
is_main_thread() static |
|
is_started() const |
|
void |
set_thread_safety_checks_enabled(enabled: bool) static |
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
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.
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.
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.
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.