Evenementen#

Invoering#

Met behulp van event-objecten kun je functies parallel uitvoeren. In plaats van functies of threads één voor één aan te roepen, kun je met events functies registreren en ze vervolgens allemaal tegelijk activeren. Elke geregistreerde functie draait in een eigen thread, waardoor je robot meerdere dingen tegelijk kan doen, zoals TouchLEDs laten knipperen en rijden.

Hieronder vindt u een lijst met beschikbare methoden en constructors:

  • Event – Maakt een nieuw gebeurtenisobject aan.

  • broadcast – Activeert alle geregistreerde functies in een gebeurtenisobject om parallel te worden uitgevoerd.

  • broadcast_and_wait – Activeert alle geregistreerde functies in een gebeurtenisobject en wacht tot ze klaar zijn voordat verder wordt gegaan.

  • event – Registreert een functie bij het event-object, eventueel met argumenten.

Create an Event Object#

Event creëert een gebeurtenisobject dat de uitvoering van functies in afzonderlijke threads beheert.

Usage:
Event()

Parameter

Beschrijving

Deze constructor heeft geen parameters.

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#

broadcast activeert een gebeurtenis, waardoor alle geregistreerde functies in aparte threads worden gestart. Deze methode onderbreekt de uitvoering van eventuele daaropvolgende functies niet.

Usage:
my_event.broadcast()

Parameter

Beschrijving

event

De naam van het eerder aangemaakte gebeurtenisobject.

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 start een gebeurtenis, maar wacht tot alle geregistreerde functies zijn voltooid voordat de volgende functies worden uitgevoerd.

Usage:
my_event.broadcast_and_wait()

Parameter

Beschrijving

event

De naam van het eerder aangemaakte gebeurtenisobject.

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#

Wanneer je een functie aan een gebeurtenis koppelt, wordt deze in een aparte thread uitgevoerd zodra de gebeurtenis wordt uitgezonden.

Usage:
event(callback, args)

Parameter

Beschrijving

event

De naam van het eerder aangemaakte gebeurtenisobject.

callback

Een vooraf gedefinieerde functie die wordt uitgevoerd wanneer de gebeurtenis wordt uitgezonden.

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)