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 |
|---|---|
|
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 |
|---|---|
|
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 |
|---|---|
|
A korábban létrehozott eseményobjektum neve. |
|
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)