Veranstaltungen#
Einführung#
Ereignisse ermöglichen die parallele Ausführung von Funktionen. Anstatt Funktionen nacheinander aufzurufen, können Sie mehrere Funktionen einem Ereignis zuweisen und diese gleichzeitig auslösen. Jede registrierte Funktion läuft in einem eigenen Thread, sodass Ihr Roboter mehrere Aufgaben gleichzeitig erledigen kann – beispielsweise Werte auf dem Bildschirm während der Fahrt anzeigen.
Um ein Ereignis zu erstellen und anschließend zu verwenden, befolgen Sie diese Schritte in dieser Reihenfolge:
Erstelle das Ereignis mit
Event.Registrieren Sie eine Funktion, die ausgelöst werden soll, wenn das
Eventübertragen wird, indem Sie daseventObjekt mit der Funktion als Argument aufrufen.Broadcast an
Event:broadcast– Löst aus, dass alle registrierten Funktionen in einem Ereignisobjekt gleichzeitig ausgeführt werden.broadcast_and_wait– Löst alle registrierten Funktionen in einem Ereignisobjekt aus und wartet, bis diese abgeschlossen sind, bevor fortgefahren wird.
Ein Ereignis erstellen#
Event erstellt ein Ereignisobjekt, das die Funktionsausführung in separaten Threads verwaltet.
Usage:
Event()
Parameter |
Beschreibung |
|---|---|
Dieser Konstruktor hat keine Parameter. |
# 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)
def main():
# Creating the move_event Event
move_event = Event()
move_event(move_square)
move_event.broadcast()
bumper.set_color(GREEN)
# Start threads — Do not delete
start_thread(main)
Funktionen einem Ereignis zuordnen#
Wenn Sie eine Funktion für ein Ereignis registrieren, wird diese in einem separaten Thread ausgeführt, wenn das Ereignis übertragen wird.
Usage:
event(callback, args)
Parameter |
Beschreibung |
|---|---|
|
Der Name des zuvor erstellten Ereignisobjekts. |
|
Eine zuvor definierte Funktion, die ausgeführt wird, wenn das Ereignis übertragen wird. |
|
Optional. Ein Tupel von Argumenten, die an die Callback-Funktion übergeben werden sollen. |
# 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)
def main():
move_event = Event()
# Register the move_square function to the move_event Event
move_event(move_square)
move_event.broadcast()
bumper.set_color(GREEN)
# Start threads — Do not delete
start_thread(main)
Eine Veranstaltung übertragen#
broadcast#
Der Befehl broadcast löst ein Ereignis aus und startet alle registrierten Funktionen in separaten Threads. Die Ausführung nachfolgenden Codes wird dadurch nicht unterbrochen.
Usage:
event.broadcast()
Parameter |
Beschreibung |
|---|---|
|
Der Name des zuvor erstellten Ereignisobjekts. |
# 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)
def main():
move_event = Event()
move_event(move_square)
# Broadcasting the move_event Event
move_event.broadcast()
bumper.set_color(GREEN)
# Start threads — Do not delete
start_thread(main)
broadcast_and_wait#
broadcast_and_wait startet ein Ereignis, wartet aber, bis alle registrierten Funktionen abgeschlossen sind, bevor mit den nachfolgenden Funktionen fortgefahren wird.
Usage:
event.broadcast_and_wait()
Parameter |
Beschreibung |
|---|---|
|
Der Name des zuvor erstellten Ereignisobjekts. |
# 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)
def main():
# 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()
bumper.set_color(GREEN)
# Start threads — Do not delete
start_thread(main)