Нити#

Введение#

Потоки позволяют роботу выполнять несколько задач одновременно в рамках одной программы. Они обеспечивают многозадачность, позволяя роботу выполнять независимые действия одновременно.

Примечание: Для использования с потоком необходимо сначала определить функцию.

Конструктор – Создает и запускает новые потоки.

  • Thread – Запускает новый поток, который выполняет указанную функцию параллельно с основной программой.

Действие – Управление запущенными потоками.

  • stop – Останавливает поток вручную, полезно для остановки фоновой работы.

Конструктор#

Thread#

Thread создает и запускает поток. При создании потока вы можете присвоить ему имя, чтобы остановить его, когда он больше не понадобится.

Применение:

my_thread = Thread(my_function)

Параметры

Описание

my_thread

Необязательно. Название для новой темы.

my_function

Название ранее определенной функции.

Примечание: Функция всегда должна быть определена до её вызова.

def move_square():
    # Move in a square path
    while True:
        arm.move_inc(100, 0, 0)
        arm.move_inc(0, 100, 0)
        arm.move_inc(-100, 0, 0)
        arm.move_inc(0, 100, 0)

move_square_thread = Thread(move_square)
signal_tower.set_color(SignalTower.BLUE, SignalTower.BLINK)

# Run multiple threads simultaneously
def move_square():
    # Move in a square path
    while True:
        arm.move_inc(100, 0, 0)
        arm.move_inc(0, 100, 0)
        arm.move_inc(-100, 0, 0)
        arm.move_inc(0, 100, 0)

def lights():
    while True:
        # Turn on all LEDs
        signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
        wait(0.25, SECONDS)
        # Turn on just the red LED
        signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
        wait(0.25, SECONDS)

move_square_thread = Thread(move_square)
lights_thread = Thread(lights)

Действие#

stop#

stop останавливает поток вручную, что полезно, когда задача больше не нужна или когда программе необходимо перезапустить потоки. После остановки поток нельзя перезапустить. Чтобы запустить его снова, необходимо создать новый поток с помощью Thread.

Применение:

my_thread.stop()

Параметры

Описание

my_thread

Объект потока, запущенного ранее. Это имя, присвоенное потоку при его создании с использованием Thread.

"""
Run multiple threads simultaneously
Move the end effector, flash lights and display the x position at once
Stop blinking after 2 seconds
"""
def lights():
    while True:
        # Turn on all LEDs
        signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
        wait(0.25, SECONDS)
        # Turn on just the red LED
        signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
        wait(0.25, SECONDS)

def display_x():
    while True:
        brain.clear_row()
        brain.set_cursor(1, 1)
        brain.print("X Position: {}".format(arm.get_x()))
        wait(50, MSEC)

lights_thread = Thread(lights)     
display_x_thread = Thread(display_x)
arm.move_to(200, 140, 210)

wait(2, SECONDS)
lights_thread.stop()