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. |
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()
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. |
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()
Eine Veranstaltung übertragen#
broadcast#
Der Befehl broadcast löst ein Ereignis aus und startet alle registrierten Funktionen in separaten Threads. Die Ausführung nachfolgender Funktionen 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)
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 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. |
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)