Evenementen#
Invoering#
Met behulp van event-objecten kun je functies parallel uitvoeren. In plaats van functies of threads één voor één aan te roepen, kun je met events functies registreren en ze vervolgens allemaal tegelijk activeren. Elke geregistreerde functie draait in een eigen thread, waardoor je robot meerdere dingen tegelijk kan doen, zoals TouchLEDs laten knipperen en rijden.
Hieronder vindt u een lijst met beschikbare methoden en constructors:
Event– Maakt een nieuw gebeurtenisobject aan.broadcast– Activeert alle geregistreerde functies in een gebeurtenisobject om parallel te worden uitgevoerd.broadcast_and_wait– Activeert alle geregistreerde functies in een gebeurtenisobject en wacht tot ze klaar zijn voordat verder wordt gegaan.event– Registreert een functie bij het event-object, eventueel met argumenten.
Create an Event Object#
Event creëert een gebeurtenisobject dat de uitvoering van functies in afzonderlijke threads beheert.
Usage:
Event()
Parameter |
Beschrijving |
|---|---|
Deze constructor heeft geen parameters. |
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 activeert een gebeurtenis, waardoor alle geregistreerde functies in aparte threads worden gestart. Deze methode onderbreekt de uitvoering van eventuele daaropvolgende functies niet.
Usage:
my_event.broadcast()
Parameter |
Beschrijving |
|---|---|
|
De naam van het eerder aangemaakte gebeurtenisobject. |
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 start een gebeurtenis, maar wacht tot alle geregistreerde functies zijn voltooid voordat de volgende functies worden uitgevoerd.
Usage:
my_event.broadcast_and_wait()
Parameter |
Beschrijving |
|---|---|
|
De naam van het eerder aangemaakte gebeurtenisobject. |
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#
Wanneer je een functie aan een gebeurtenis koppelt, wordt deze in een aparte thread uitgevoerd zodra de gebeurtenis wordt uitgezonden.
Usage:
event(callback, args)
Parameter |
Beschrijving |
|---|---|
|
De naam van het eerder aangemaakte gebeurtenisobject. |
|
Een vooraf gedefinieerde functie die wordt uitgevoerd wanneer de gebeurtenis wordt uitgezonden. |
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)