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
Поток, работающий с более высоким приоритетом, чем обычно.
Описания метода
Возвращает ID текущего Thread, уникально идентифицируя его среди всех потоков. Если Thread не начал работу или был вызван wait_to_finish(), возвращается пустая строка.
Возвращает true, если этот Thread в данный момент выполняет предоставленную функцию. Это полезно для определения того, можно ли вызвать wait_to_finish() без блокировки вызывающего потока.
Чтобы проверить, можно ли присоединиться к Thread, используйте is_started().
bool is_main_thread() static 🔗
Возвращает true, если поток, из которого был вызван этот метод, является основным потоком.
Примечание: Это статический метод, не связанный с конкретным объектом Thread.
Возвращает 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().
priority Thread можно изменить, передав значение из перечисления Priority.
Возвращает @GlobalScope.OK в случае успеха или @GlobalScope.ERR_CANT_CREATE в случае неудачи.
Присоединяется к Thread и ждет его завершения. Возвращает вывод Callable, переданный в start().
Следует использовать либо когда вы хотите получить значение, возвращаемое из метода, вызванного Thread, либо перед освобождением экземпляра, содержащего Thread.
Чтобы определить, можно ли вызвать это без блокировки вызывающего потока, проверьте, является ли is_alive() false.