Thread

Успадковує: RefCounted < Object

Блок виконання в процесі.

Опис

Одиниця виконання в процесі. Може одночасно запускати методи на Object. Використання синхронізації через Mutex або Semaphore рекомендується при роботі зі спільними об'єктами.

Попередження:

Щоб забезпечити належне очищення без збоїв або блокувань, коли кількість посилань Потоку досягає нуля і, таким чином, він знищується, повинні бути виконані такі умови:

  • Він не повинен мати заблокованих об'єктів Mutex.

  • Він не повинен очікувати на жодних об'єктах Semaphore.

  • Для нього мав бути викликаний wait_to_finish().

Посібники

Методи

String

get_id() const

bool

is_alive() const

bool

is_started() const

void

set_thread_safety_checks_enabled(enabled: bool) static

Error

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

Variant

wait_to_finish()


Переліки

enum Priority: 🔗

Priority PRIORITY_LOW = 0

Нитка, що працює з меншим пріоритетом, ніж зазвичай.

Priority PRIORITY_NORMAL = 1

Нитка з стандартним пріоритетом.

Priority PRIORITY_HIGH = 2

Нитка, що працює з вищим пріоритетом, ніж зазвичай.


Описи методів

String get_id() const 🔗

Повертає ідентифікатор поточного потоку Thread, унікально ідентифікуючи його серед усіх потоків. Якщо Thread ще не розпочав роботу або якщо викликано метод wait_to_finish(), повертається порожній рядок.


bool is_alive() const 🔗

Повертаємо true, якщо це Thread наразі працює надана функція. Це корисно для визначення, якщо wait_to_finish() можна назвати без блокування викличної нитки.

Щоб перевірити, чи є Thread, скористайтеся is_started().


bool is_started() const 🔗

Повертає true, якщо цей Thread було запущено. Після запуску повертатиме true, доки до нього не буде приєднано за допомогою wait_to_finish(). Щоб перевірити, чи Thread все ще виконує своє завдання, використовуйте is_alive().


void set_thread_safety_checks_enabled(enabled: bool) static 🔗

Встановлює, чи повинні перевірки безпеки потоків, які рушій зазвичай виконує в методах певних класів (наприклад, Node), виконуватися у поточному потоці.

За замовчуванням для кожного потоку вони ввімкнені (ніби викликаються зі значенням enabled, що дорівнює true).

Ці перевірки є консервативними. Це означає, що вони успішно вважатимуть виклик безпечним для потоків (і, отже, дозволять йому відбутися), лише якщо рушій може гарантувати таку безпеку.

Через це можуть бути випадки, коли користувач може захотіти вимкнути їх (enabled зі значенням false), щоб знову дозволити певні операції. Роблячи це, користувач несе відповідальність за забезпечення безпеки потоків (наприклад, використовуючи Mutex) для тих об'єктів, які в іншому випадку захищені рушієм.

Примітка: Це розширене використання рушія. Рекомендується використовувати його лише тоді, коли ви знаєте, що робите, і немає безпечнішого способу.

Примітка: Це корисно для скриптів, що працюють на довільних об'єктах Thread або завданнях, що надсилаються до WorkerThreadPool. Це не стосується коду, що виконується під час обробки групи Node, де перевірки будуть виконуватися завжди.

Примітка: Навіть у випадку вимкнення перевірок у завданні WorkerThreadPool немає потреби повторно вмикати їх після завершення. Двигун зробить це сам.


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

Запускає новий Thread, який викликає callable.

Якщо метод приймає деякі аргументи, ви можете передати їх за допомогою Callable.bind().

Param priority Thread можна змінити, передавши значення з переліку Priority.

Повертає @GlobalScope.OK у разі успіху або @GlobalScope.ERR_CANT_CREATE у разі невдачі.


Variant wait_to_finish() 🔗

Приєднується до Thread та очікує його завершення. Повертає вивід Callable, переданого до start().

Слід використовувати або тоді, коли потрібно отримати значення, повернене методом, викликаним Thread, або перед звільненням екземпляра, який містить Thread.

Щоб визначити, чи можна викликати це без блокування викликаючого потоку, перевірте, чи is_alive() має значення false.