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.

# Drive forward while blinking screen
def blink_screen():
    while True:
        brain.screen.clear_screen(Color.RED)
        wait(0.5, SECONDS)
        brain.screen.clear_screen()
        wait(0.5, SECONDS)

blink_screen_thread = Thread(blink_screen)
drivetrain.drive(FORWARD)

# Run multiple threads simultaneously
# Turn right, blink screen at once
def blink_screen():
    while True:
        brain.screen.clear_screen(Color.RED)
        wait(0.5, SECONDS)
        brain.screen.clear_screen()
        wait(0.5, SECONDS)

def turning():
    drivetrain.turn(RIGHT)

blink_screen_thread = Thread(blink_screen)
turning_thread = Thread(turning)

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
Turn right, play a sound and display heading at once
Stop playing sounds after 2 seconds
"""
def sound():
    while True:
        brain.play_sound(SoundType.ALARM)
        wait(0.5, SECONDS)

def display_heading():
    while True:
        brain.screen.clear_row()
        brain.screen.set_cursor(1, 1)
        brain.screen.print("Heading: {}".format(brain_inertial.orientation(YAW)))
        wait(50, MSEC)

sound_thread = Thread(sound)     
display_heading_thread = Thread(display_heading)
drivetrain.turn(RIGHT)

wait(2, SECONDS)
sound_thread.stop()