Wątki#

Wstęp#

Wątki pozwalają robotowi wykonywać wiele zadań jednocześnie w ramach tego samego programu. Umożliwiają one wielozadaniowość, pozwalając robotowi wykonywać niezależne czynności w tym samym czasie.

Uwaga: Aby używać funkcji z wątkiem, należy ją najpierw zdefiniować.

Konstruktor – tworzenie i uruchamianie nowych wątków.

  • Thread – Rozpoczyna nowy wątek, który uruchamia określoną funkcję równolegle z programem głównym.

Akcja – Kontrola uruchomionych wątków.

  • stop – Zatrzymuje wątek ręcznie, przydatne do zatrzymania działania w tle.

Konstruktor#

Thread#

Thread tworzy i uruchamia wątek. Podczas tworzenia wątku możesz nadać mu nazwę, aby zatrzymać go, gdy nie będzie już potrzebny.

Stosowanie:

my_thread = Thread(my_function)

Parametry

Opis

my_thread

Opcjonalnie. Nazwa nowego wątku.

my_function

Nazwa wcześniej zdefiniowanej funkcji.

Uwaga: Funkcja musi zawsze zostać zdefiniowana przed jej wywołaniem.

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)

Działanie#

stop#

stop zatrzymuje wątek ręcznie, co jest przydatne, gdy zadanie nie jest już potrzebne lub gdy program wymaga zresetowania wątków. Po zatrzymaniu wątku nie można go ponownie uruchomić. Aby go ponownie uruchomić, należy utworzyć nowy wątek za pomocą Thread.

Stosowanie:

my_thread.stop()

Parametry

Opis

my_thread

Wcześniej uruchomiony obiekt wątku. Jest to nazwa przypisana podczas tworzenia wątku przy użyciu Thread.

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