Händelser#
Introduktion#
Händelser låter dig köra funktioner parallellt med hjälp av händelseobjekt. Istället för att anropa funktioner eller trådar efter varandra, låter händelser dig registrera funktioner och sedan utlösa dem alla samtidigt. Varje registrerad funktion körs i sin egen tråd, så din robot kan göra flera saker – som att blinka TouchLED-lampor och köra – samtidigt.
Nedan följer en lista över tillgängliga metoder och konstruktorer:
Event– Skapar ett nytt händelseobjekt.broadcast– Utlöser att alla registrerade funktioner i ett händelseobjekt körs parallellt.broadcast_and_wait– Utlöser alla registrerade funktioner i ett händelseobjekt och väntar på att de ska slutföras innan den fortsätter.event– Registrerar en funktion till händelseobjektet, eventuellt med argument.
Create an Event Object#
Event skapar ett händelseobjekt som hanterar funktionskörning i separata trådar.
Usage:
Event()
Parameter |
Beskrivning |
|---|---|
Denna konstruktor har inga parametrar. |
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 utlöser en händelse, vilket startar alla registrerade funktioner i separata trådar. Den här metoden pausar inte körningen av några efterföljande funktioner.
Usage:
my_event.broadcast()
Parameter |
Beskrivning |
|---|---|
|
Namnet på det tidigare skapade händelseobjektet. |
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 startar en händelse men väntar tills alla registrerade funktioner är klara innan den fortsätter med efterföljande funktioner.
Usage:
my_event.broadcast_and_wait()
Parameter |
Beskrivning |
|---|---|
|
Namnet på det tidigare skapade händelseobjektet. |
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#
När du registrerar en funktion till en händelse kommer den att köras i en separat tråd när händelsen sänds.
Usage:
event(callback, args)
Parameter |
Beskrivning |
|---|---|
|
Namnet på det tidigare skapade händelseobjektet. |
|
En tidigare definierad funktion som ska köras när händelsen sänds. |
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)