Trådar#
Introduktion#
Trådar gör det möjligt för en robot att köra flera uppgifter samtidigt inom samma program. De möjliggör multitasking, vilket gör att roboten kan utföra oberoende åtgärder samtidigt.
Obs: Du måste först definiera en funktion för att kunna använda den med en tråd.
Konstruktör – Skapa och starta nya trådar.
Thread– Startar en ny tråd som kör den angivna funktionen parallellt med huvudprogrammet.
Åtgärd – Kontrollera pågående trådar.
stop– Stoppar en tråd manuellt, användbart för att stoppa bakgrundsbeteende.
Konstruktör#
Thread#
Thread skapar och startar en tråd. När du skapar en tråd kan du namnge den för att stoppa den när den inte längre behövs.
Användande:
my_thread = Thread(my_function)
Parametrar |
Beskrivning |
|---|---|
|
Valfritt. Ett namn för den nya tråden. |
|
Namnet på en tidigare definierad funktion. |
Obs: En funktion måste alltid definieras innan den anropas.
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)
Handling#
stop#
stop stoppar en tråd manuellt, vilket är användbart när en uppgift inte längre behövs eller när ett program behöver återställa trådar. När en tråd har stoppats kan den inte startas om. För att köra den igen måste du skapa en ny tråd med Tråd.
Användande:
my_thread.stop()
Parametrar |
Beskrivning |
|---|---|
|
Ett tidigare startat trådobjekt. Detta är namnet som tilldelades när tråden skapades med hjälp av |
"""
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()