Hilos#

Introducción#

Los subprocesos permiten que un robot ejecute múltiples tareas simultáneamente dentro del mismo programa. Permiten la multitarea, dejando que el robot realice acciones independientes al mismo tiempo.

Nota: Debes definir primero una función para usarla con un hilo.

Constructor: crea e inicia nuevos subprocesos.

  • Thread – Inicia un nuevo hilo que ejecuta la función especificada en paralelo con el programa principal.

Acción: controle los subprocesos en ejecución.

  • stop – Detiene un hilo manualmente, útil para detener el comportamiento de fondo.

Constructor#

Thread#

Thread crea e inicia un subproceso. Cuando creas un hilo, puedes nombrarlo para detenerlo cuando ya no sea necesario.

Uso:

my_thread = Thread(my_function)

Parámetros

Descripción

my_thread

Opcional. Un nombre para el nuevo hilo.

my_function

El nombre de una función previamente definida.

Nota: Una función debe definirse siempre antes de que se llame.

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)

Acción#

stop#

stop detiene un subproceso manualmente, lo cual es útil cuando ya no se necesita una tarea o cuando un programa necesita restablecer los subprocesos. Una vez que se detiene un hilo, no se puede reiniciar. Para ejecutarlo de nuevo, debe crear un nuevo subproceso usando Subproceso.

Uso:

my_thread.stop()

Parámetros

Descripción

my_thread

Un objeto de subproceso iniciado previamente. Este es el nombre asignado cuando se creó el subproceso utilizando el 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()