Události#

Zavedení#

Události umožňují spouštět funkce paralelně pomocí objektů událostí. Místo volání funkcí nebo vláken jednu po druhé vám události umožňují registrovat funkce a poté je všechny spouštět najednou. Každá registrovaná funkce běží ve vlastním vlákně, takže váš robot může dělat více věcí současně – například blikat dotykové LED diody a řídit.

Níže je uveden seznam dostupných metod a konstruktorů:

  • Event – Vytvoří nový objekt události.

  • broadcast – Spouští všechny registrované funkce v objektu události tak, aby běžely paralelně.

  • broadcast_and_wait – Spustí všechny registrované funkce v objektu události a před pokračováním čeká na jejich dokončení.

  • event – Zaregistruje funkci do objektu události, volitelně s argumenty.

Create an Event Object#

Event vytvoří objekt události, který spravuje provádění funkcí v samostatných vláknech.

Usage:
Event()

Parametr

Popis

Tento konstruktor nemá žádné parametry.

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 spustí událost, která spustí všechny registrované funkce v samostatných vláknech. Tato metoda nepozastaví provádění žádných následných funkcí.

Usage:
my_event.broadcast()

Parametr

Popis

event

Název dříve vytvořeného objektu události.

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 spustí událost, ale před pokračováním v následujících funkcích čeká na dokončení všech registrovaných funkcí.

Usage:
my_event.broadcast_and_wait()

Parametr

Popis

event

Název dříve vytvořeného objektu události.

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#

Když zaregistrujete funkci k události, bude se při vysílání události provádět v samostatném vlákně.

Usage:
event(callback, args)

Parametr

Popis

event

Název dříve vytvořeného objektu události.

callback

Předem definovaná funkce, která se spustí při vysílání události.

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)