Händelser#
Introduktion#
Händelser låter dig köra funktioner parallellt. Istället för att anropa funktioner sekventiellt kan du registrera flera funktioner till en händelse och utlösa dem alla samtidigt. Varje registrerad funktion körs i sin egen tråd, vilket gör att din robot kan utföra flera uppgifter samtidigt – som att visa värden på skärmen under körning.
För att skapa och sedan använda en händelse, följ dessa steg i ordning:
Skapa händelsen med
Event.Registrera en funktion som ska utlösas när
Eventsänds genom att anropaeventobject med funktionen som argument.Broadcast an
Event:broadcast– Utlöser att alla registrerade funktioner i ett händelseobjekt körs samtidigt.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.
Skapa ett evenemang#
Event skapar ett händelseobjekt som hanterar funktionskörning i separata trådar.
Usage:
Event()
Parameter |
Beskrivning |
|---|---|
Denna konstruktor har inga parametrar. |
def move_square():
for index in range(4):
drivetrain.drive_for(FORWARD, 150)
drivetrain.turn_for(RIGHT, 90)
# *** Creating the move_event Event ***
move_event = Event()
# Register move_square to move_event
move_event(move_square)
# Call all functions registered to move_event
move_event.broadcast()
Registrera funktioner till en händelse#
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. |
|
Valfritt. En tupel argument som ska skickas till återanropsfunktionen. |
def move_square():
for index in range(4):
drivetrain.drive_for(FORWARD, 150)
drivetrain.turn_for(RIGHT, 90)
# Creating the move_event Event
move_event = Event()
# *** Register move_square to move_event ***
move_event(move_square)
# Call all functions registered to move_event
move_event.broadcast()
Sänd ett evenemang#
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:
event.broadcast()
Parameter |
Beskrivning |
|---|---|
|
Namnet på det tidigare skapade händelseobjektet. |
# Build Used: Super Code Base 2.0
def move_square():
for index in range(4):
drivetrain.drive_for(FORWARD, 150)
drivetrain.turn_for(RIGHT, 90)
move_event = Event()
move_event(move_square)
# Broadcasting the move_event Event
move_event.broadcast()
optical_sensor.set_light_power(100, PERCENT)
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:
event.broadcast_and_wait()
Parameter |
Beskrivning |
|---|---|
|
Namnet på det tidigare skapade händelseobjektet. |
def move_square():
for index in range(4):
drivetrain.drive_for(FORWARD, 150)
drivetrain.turn_for(RIGHT, 90)
# Set up and call the move_square event
move_event = Event()
move_event(move_square)
# Broadcast the move_event Event and wait
move_event.broadcast_and_wait()
optical_sensor.set_light_power(100, PERCENT)