Fios#

Introdução#

Os threads permitem que um robô execute várias tarefas em simultâneo dentro do mesmo programa. Possibilitam a multitarefa, permitindo que o robô execute ações independentes ao mesmo tempo.

Nota: Deve primeiro definir uma função para a utilizar com um thread.

Construtor — Cria e inicia novos threads.

  • Thread — Inicia uma nova thread que executa a função especificada em paralelo com o programa principal.

Ação — Controlar threads em execução.

  • stop — Interrompe um thread manualmente, útil para interromper o comportamento em segundo plano.

Construtor#

Thread#

Thread cria e inicia uma thread. Ao criar uma thread, pode nomeá-la para a interromper quando já não for necessária.

Utilização:

my_thread = Thread(my_function)

Parâmetros

Descrição

my_thread

Opcional. Um nome para o novo tópico.

my_function

O nome de uma função previamente definida.

Nota: Uma função deve ser sempre definida antes de ser chamada.

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

Ação#

stop#

stop pára um thread manualmente, o que é útil quando uma tarefa já não é necessária ou quando um programa necessita de reiniciar threads. Uma vez que uma thread é interrompida, não pode ser reiniciada. Para a executar novamente, deve criar uma nova thread utilizando Thread.

Utilização:

my_thread.stop()

Parâmetros

Descrição

my_thread

Um objeto de thread previamente iniciado. Este é o nome atribuído quando o thread foi criado utilizando 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()