Siūlai#

Įvadas#

Gijos leidžia robotui vienu metu vykdyti kelias užduotis toje pačioje programoje. Jos įgalina daugiaprogramį darbą, leisdamos robotui atlikti nepriklausomus veiksmus tuo pačiu metu.

Pastaba: Norėdami naudoti funkciją su gijos, turite pirmiausia apibrėžti ją.

Konstruktorius – Kurkite ir pradėkite naujas gijas.

  • Threadgijos – Pradeda naują giją, kuri vykdo nurodytą funkciją lygiagrečiai su pagrindine programa.

Veiksmas – Valdykite veikiančias gijas.

  • stop – Sustabdo giją rankiniu būdu, naudinga norint sustabdyti foninį elgesį.

Konstruktorius#

Thread#

Thread gija sukuria ir pradeda giją. Sukūrę giją, galite ją pavadinti, kad sustabdytumėte ją, kai jos nebereikės.

Naudojimas:

my_thread = Thread(my_function)

Parametrai

Aprašymas

my_thread

Pasirinktinai. Naujo siūlelio pavadinimas.

my_function

Anksčiau apibrėžtos funkcijos pavadinimas.

Pastaba: Funkcija visada turi būti apibrėžta prieš ją iškviečiant.

# Drive forward while blinking lights
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, BLUE)
        wait(0.5, SECONDS)
blink_lights_thread = Thread(blink_lights)
robot.move_at(0)

# Run multiple threads simultaneously
# Turn right, blink lights and display heading at once
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, GREEN)
        wait(0.5, SECONDS)

def display_heading():
    while True:
        robot.screen.clear_row()
        robot.screen.set_cursor(1, 1)
        robot.screen.print(f"Heading: {robot.inertial.get_yaw()}")
        wait(50, MSEC)

blink_lights_thread = Thread(blink_lights)     
display_heading_thread = Thread(display_heading)
robot.turn(RIGHT)

Veiksmas#

stop#

stop rankiniu būdu sustabdo giją, o tai naudinga, kai užduotis nebereikalinga arba kai programai reikia iš naujo nustatyti gijas. Sustabdžius giją, jos negalima paleisti iš naujo. Norėdami ją vėl paleisti, turite sukurti naują giją naudodami Thread.

Naudojimas:

my_thread.stop()

Parametrai

Aprašymas

my_thread

Anksčiau paleistas gijos objektas. Tai pavadinimas, priskirtas kuriant giją naudojant Thread.

"""
Run multiple threads simultaneously
Turn right, blink lights and display heading at once
Stop blinking lights after 2 seconds
"""
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.off(ALL_LEDS)
        wait(0.5, SECONDS)

def display_heading():
    while True:
        robot.screen.clear_row()
        robot.screen.set_cursor(1, 1)
        robot.screen.print(f"Heading: {robot.inertial.get_yaw()}")
        wait(50, MSEC)

blink_lights_thread = Thread(blink_lights)     
display_heading_thread = Thread(display_heading)
robot.turn(RIGHT)

wait(2, SECONDS)
blink_lights_thread.stop()