Vlákna#

Zavedení#

Vlákna umožňují robotovi spouštět více úloh současně v rámci stejného programu. Umožňují multitasking, což robotovi umožňuje provádět nezávislé akce současně.

Poznámka: Abyste mohli funkci použít s vláknem, musíte ji nejprve definovat.

Konstruktor – Vytváření a zakládání nových vláken.

  • Thread – Spustí nové vlákno, které spouští zadanou funkci paralelně s hlavním programem.

Akce – Ovládání spuštěných vláken.

  • stop – Ručně zastaví vlákno, užitečné pro zastavení chování na pozadí.

Konstruktor#

Thread#

Thread vytváří a spouští vlákno. Při vytváření vlákna ho můžete pojmenovat, abyste ho zastavili, když již není potřeba.

Používání:

my_thread = Thread(my_function)

Parametry

Popis

my_thread

Volitelné. Název nového vlákna.

my_function

Název dříve definované funkce.

Poznámka: Funkce musí být vždy definována před svým voláním.

# Drive forward while blinking lights
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, BLUE)
        wait(0.5, SECONDS)
blink_lights_thread = Thread(blink_lights)
robot.move_at(0)

# Run multiple threads simultaneously
# Turn right, blink lights and display heading at once
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, GREEN)
        wait(0.5, SECONDS)

def display_heading():
    while True:
        robot.screen.clear_row()
        robot.screen.set_cursor(1, 1)
        robot.screen.print(f"Heading: {robot.inertial.get_yaw()}")
        wait(50, MSEC)

blink_lights_thread = Thread(blink_lights)     
display_heading_thread = Thread(display_heading)
robot.turn(RIGHT)

Akce#

stop#

stop ručně zastaví vlákno, což je užitečné, když úloha již není potřeba nebo když program potřebuje resetovat vlákna. Jakmile je vlákno zastaveno, nelze jej restartovat. Chcete-li jej znovu spustit, musíte vytvořit nové vlákno pomocí Thread.

Používání:

my_thread.stop()

Parametry

Popis

my_thread

Dříve spuštěný objekt vlákna. Toto je název přiřazený při vytvoření vlákna pomocí Thread.

"""
Run multiple threads simultaneously
Turn right, blink lights and display heading at once
Stop blinking lights after 2 seconds
"""
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.off(ALL_LEDS)
        wait(0.5, SECONDS)

def display_heading():
    while True:
        robot.screen.clear_row()
        robot.screen.set_cursor(1, 1)
        robot.screen.print(f"Heading: {robot.inertial.get_yaw()}")
        wait(50, MSEC)

blink_lights_thread = Thread(blink_lights)     
display_heading_thread = Thread(display_heading)
robot.turn(RIGHT)

wait(2, SECONDS)
blink_lights_thread.stop()