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:

  1. Erstelle das Ereignis mit Event.

  2. Registrieren Sie eine Funktion, die ausgelöst werden soll, wenn das Event übertragen wird, indem Sie das event Objekt mit der Funktion als Argument aufrufen.

  3. 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):
        robot.drive_for(FORWARD, 1, STEPS)
        robot.turn_for(RIGHT, 90)

# Creating the move_event Event
move_event = Event()
move_event(move_square)
move_event.broadcast()
robot.led.glow(GREEN)

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

event

Der Name des zuvor erstellten Ereignisobjekts.

callback

Eine zuvor definierte Funktion, die ausgeführt wird, wenn das Ereignis übertragen wird.

args

Optional. Ein Tupel von Argumenten, die an die Callback-Funktion übergeben werden sollen.

def move_square():
    for index in range(4):
        robot.drive_for(FORWARD, 1, STEPS)
        robot.turn_for(RIGHT, 90)

move_event = Event()
# Register the move_square function to the move_event Event
move_event(move_square)
move_event.broadcast()
robot.led.glow(GREEN)

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

event

Der Name des zuvor erstellten Ereignisobjekts.

def move_square():
    for index in range(4):
        robot.drive_for(FORWARD, 1, STEPS)
        robot.turn_for(RIGHT, 90)

move_event = Event()
move_event(move_square)
# Broadcasting the move_event Event
move_event.broadcast()
robot.led.glow(GREEN)

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

event

Der Name des zuvor erstellten Ereignisobjekts.

def move_square():
    for index in range(4):
        robot.drive_for(FORWARD, 1, STEPS)
        robot.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()
robot.led.glow(GREEN)