Draden#

Invoering#

Threads stellen een robot in staat om meerdere taken tegelijkertijd binnen hetzelfde programma uit te voeren. Ze maken multitasking mogelijk, waardoor de robot onafhankelijke acties tegelijkertijd kan uitvoeren.

Opmerking: Je moet eerst een functie definiëren om deze met een thread te kunnen gebruiken.

Constructor – Nieuwe threads aanmaken en starten.

  • Thread – Start een nieuwe thread die de opgegeven functie parallel met het hoofdprogramma uitvoert.

Actie – Beheer actieve threads.

  • stop – Stopt een thread handmatig, handig om achtergrondgedrag te stoppen.

Constructor#

Thread#

Thread maakt en start een thread. Wanneer je een thread maakt, kun je deze een geven om hem te stoppen wanneer hij niet langer nodig is.

Gebruik:

my_thread = Thread(my_function)

Parameters

Beschrijving

my_thread

Optioneel. Een naam voor de nieuwe thread.

my_function

De naam van een eerder gedefinieerde functie.

Let op: Een functie moet altijd gedefinieerd zijn voordat deze wordt aangeroepen.

# 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)

Actie#

stop#

stop wordt een thread handmatig gestopt. Dit is handig wanneer een taak niet langer nodig is of wanneer een programma threads moet resetten. Zodra een thread is gestopt, kan deze niet opnieuw worden gestart. Om de thread opnieuw te starten, moet u een nieuwe thread maken met Thread.

Gebruik:

my_thread.stop()

Parameters

Beschrijving

my_thread

Een eerder gestart threadobject. Dit is de naam die is toegewezen toen de thread werd gemaakt met behulp van 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()