Threads#

Einführung#

Threads ermöglichen es einem Roboter, mehrere Aufgaben gleichzeitig innerhalb desselben Programms auszuführen. Sie ermöglichen Multitasking und erlauben dem Roboter, gleichzeitig unabhängige Aktionen durchzuführen.

Hinweis: Sie müssen zuerst eine Funktion definieren, um sie mit einem Thread verwenden zu können.

Konstruktor – Neue Threads erstellen und starten.

  • Thread – Startet einen neuen Thread, der die angegebene Funktion parallel zum Hauptprogramm ausführt.

Aktion – Laufende Threads steuern.

  • stop – Stoppt einen Thread manuell, nützlich zum Anhalten von Hintergrundprozessen.

Konstruktor#

Thread#

Thread erstellt und startet einen Thread. Beim Erstellen eines Threads kann man ihm einen Namen geben, um ihn zu beenden, sobald er nicht mehr benötigt wird.

Verwendung:

my_thread = Thread(my_function)

Parameter

Beschreibung

my_thread

Optional. Ein Name für den neuen Thread.

my_function

Der Name einer zuvor definierten Funktion.

Hinweis: Eine Funktion muss *immer vor ihrem Aufruf definiert werden.

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

Aktion#

stop#

stop stops a thread manually, which is useful when a task is no longer needed or when a program needs to reset threads. Once a thread is stopped, it cannot be restarted. To run it again, you must create a new thread using Thread.

Verwendung:

my_thread.stop()

Parameter

Beschreibung

my_thread

Ein zuvor gestartetes Thread-Objekt. Dies ist der Name, der dem Thread bei der Erstellung mit Thread zugewiesen wurde.

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