Теми#

Вступ#

Потоки дозволяють роботу виконувати кілька завдань одночасно в одній програмі. Вони забезпечують багатозадачність, дозволяючи роботу виконувати незалежні дії одночасно.

Примітка: Ви повинні спочатку визначити функцію, щоб використовувати її з потоком.

Конструктор – Створення та початок нових потоків.

  • 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()