Események#

Bevezetés#

Az események lehetővé teszik függvények párhuzamos futtatását eseményobjektumok használatával. A függvények vagy szálak egymás utáni meghívása helyett az események lehetővé teszik függvények regisztrálását, majd egyszerre történő elindítását. Minden regisztrált függvény a saját szálában fut, így a robot több dolgot is tud csinálni – például villogtatni a TouchLED-eket és vezetni – egyszerre.

Az alábbiakban a rendelkezésre álló metódusok és konstruktorok listája látható:

  • Event – Létrehoz egy új eseményobjektumot.

  • broadcast – Egy eseményobjektum összes regisztrált függvényét párhuzamos futtatásra készteti.

  • broadcast_and_wait – Elindítja az eseményobjektum összes regisztrált függvényét, és a folytatás előtt megvárja, amíg befejeződnek.

  • event – Függvényt regisztrál az eseményobjektumba, opcionálisan argumentumokkal.

Create an Event Object#

Event esemény létrehoz egy eseményobjektumot, amely a függvények végrehajtását külön szálakban kezeli.

Usage:
Event()

Paraméter

Leírás

Ennek a konstruktornak nincsenek paraméterei.

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 metódus egy eseményt indít el, amely az összes regisztrált függvényt külön szálakban indítja el. Ez a metódus nem függeszti fel a további függvények végrehajtását.

Usage:
my_event.broadcast()

Paraméter

Leírás

event

A korábban létrehozott eseményobjektum neve.

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 Elindít egy eseményt, de megvárja, amíg az összes regisztrált függvény befejeződik, mielőtt folytatná a további függvényekkel.

Usage:
my_event.broadcast_and_wait()

Paraméter

Leírás

event

A korábban létrehozott eseményobjektum neve.

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#

Amikor egy függvényt regisztrálsz egy eseményhez, az egy külön szálon fog végrehajtódni, amikor az eseményt sugározzuk.

Usage:
event(callback, args)

Paraméter

Leírás

event

A korábban létrehozott eseményobjektum neve.

callback

Egy korábban definiált függvény, amely az esemény szórásakor kerül végrehajtásra.

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)