Veranstaltungen#

Einführung#

Ereignisse ermöglichen es Ihnen, Funktionen parallel auszuführen, indem Sie Ereignisobjekte verwenden. Anstatt Funktionen oder Threads nacheinander aufzurufen, können Sie mit Ereignissen Funktionen registrieren und diese dann alle gleichzeitig auslösen. Jede registrierte Funktion läuft in einem eigenen Thread, sodass Ihr Roboter mehrere Aufgaben gleichzeitig erledigen kann – wie beispielsweise das Blinken von TouchLEDs und das Fahren.

Nachfolgend finden Sie eine Liste der verfügbaren Methoden und Konstruktoren:

  • Event – Erstellt ein neues Ereignisobjekt.

  • broadcast – Löst aus, dass alle registrierten Funktionen in einem Ereignisobjekt parallel ausgeführt werden.

  • broadcast_and_wait – Löst alle registrierten Funktionen in einem Ereignisobjekt aus und wartet, bis diese abgeschlossen sind, bevor fortgefahren wird.

  • event – Registriert eine Funktion beim Ereignisobjekt, optional mit Argumenten.

Create an Event Object#

Event erstellt ein Ereignisobjekt, das die Funktionsausführung in separaten Threads verwaltet.

Usage:
Event()

Parameter

Beschreibung

Dieser Konstruktor hat keine Parameter.

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#

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:
my_event.broadcast()

Parameter

Beschreibung

event

Der Name des zuvor erstellten Ereignisobjekts.

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 startet ein Ereignis, wartet aber, bis alle registrierten Funktionen abgeschlossen sind, bevor mit den nachfolgenden Funktionen fortgefahren wird.

Usage:
my_event.broadcast_and_wait()

Parameter

Beschreibung

event

Der Name des zuvor erstellten Ereignisobjekts.

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#

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.

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)