Renginiai#

Įvadas#

Įvykiai leidžia vykdyti funkcijas lygiagrečiai naudojant įvykių objektus. Užuot iškvietus funkcijas ar gijas vieną po kitos, įvykiai leidžia užregistruoti funkcijas ir jas visas vienu metu suaktyvinti. Kiekviena užregistruota funkcija veikia savo gijoje, todėl jūsų robotas gali atlikti kelis veiksmus, pavyzdžiui, mirksėti jutikliniais šviesos diodais ir vairuoti, vienu metu.

Žemiau pateikiamas galimų metodų ir konstruktorių sąrašas:

  • Event – Sukuria naują įvykio objektą.

  • broadcast – Suaktyvina visas įvykio objekte užregistruotas funkcijas, kad jos veiktų lygiagrečiai.

  • broadcast_and_wait – Suaktyvina visas užregistruotas įvykio objekto funkcijas ir palaukia, kol jos bus baigtos, prieš tęsiant.

  • event – Registruoja funkciją įvykio objekte, pasirinktinai su argumentais.

Create an Event Object#

Event įvykis sukuria įvykio objektą, kuris valdo funkcijų vykdymą atskirose gijose.

Usage:
Event()

Parametras

Aprašymas

Šis konstruktorius neturi parametrų.

def dash_lines():
    # Move the pen up and down
    while True:
        pen.move(DOWN)
        wait(0.5, SECONDS)
        pen.move(UP)
        wait(0.5, SECONDS)

def main():
    # Set the event
    move_event = Event()
    move_event(dash_lines)
    # Draw the dash line while driving forward
    move_event.broadcast()
    drivetrain.drive_for(FORWARD, 1000, MM)

# VR threads — Do not delete
vr_thread(main)

Broadcast#

broadcast sukelia įvykį, paleidžiantį visas registruotas funkcijas atskirose gijose. Šis metodas nesustabdo jokių vėlesnių funkcijų vykdymo.

Usage:
my_event.broadcast()

Parametras

Aprašymas

event

Anksčiau sukurto įvykio objekto pavadinimas.

def dash_lines():
    # Move the pen up and down
    while True:
        pen.move(DOWN)
        wait(0.5, SECONDS)
        pen.move(UP)
        wait(0.5, SECONDS)

def main():
    # Set the event
    move_event = Event()
    move_event(dash_lines)
    # Draw the dash line while driving forward
    move_event.broadcast()
    drivetrain.drive_for(FORWARD, 1000, MM)

# VR threads — Do not delete
vr_thread(main)

Broadcast and wait#

broadcast_and_wait pradeda įvykį, bet palaukia, kol bus baigtos visos registruotos funkcijos, prieš tęsiant tolesnes funkcijas.

Usage:
my_event.broadcast_and_wait()

Parametras

Aprašymas

event

Anksčiau sukurto įvykio objekto pavadinimas.

def move_and_turn():
    # Drive forward and turn
    drivetrain.drive_for(FORWARD, 150, MM)
    drivetrain.turn_for(RIGHT, 90, DEGREES)

def main():
    # Wait for the event to finish after 3 seconds
    move_event = Event()
    move_event(move_and_turn)
    while True:
        if brain.timer_time(SECONDS) > 3:
            move_event.broadcast_and_wait()
            break
        wait(5, MSEC)
    brain.print("Movement done.")

# VR threads — Do not delete
vr_thread(main)

Register Functions to an Event#

Kai užregistruosite funkciją įvykyje, ji bus vykdoma atskirame gijoje, kai įvykis bus transliuojamas.

Usage:
event(callback, args)

Parametras

Aprašymas

event

Anksčiau sukurto įvykio objekto pavadinimas.

callback

Anksčiau apibrėžta funkcija, kuri turi būti vykdoma, kai įvykis transliuojamas.

def dash_lines():
    # Move the pen up and down
    while True:
        pen.move(DOWN)
        wait(0.5, SECONDS)
        pen.move(UP)
        wait(0.5, SECONDS)

def main():
    # Set and call the event and start driving
    move_event = Event()
    move_event(dash_lines)
    move_event.broadcast()
    drivetrain.drive(FORWARD)

# VR threads — Do not delete
vr_thread(main)