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 |
|---|---|
|
Optional. Ein Name für den neuen Thread. |
|
Der Name einer zuvor definierten Funktion. |
Hinweis: Eine Funktion muss *immer vor ihrem Aufruf definiert werden.
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)
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 |
|---|---|
|
Ein zuvor gestartetes Thread-Objekt. Dies ist der Name, der dem Thread bei der Erstellung mit |
"""
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()