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 |
|---|---|
|
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 |
|---|---|
|
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 |
|---|---|
|
Název dříve vytvořeného objektu události. |
|
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)