Händelser#

Introduktion#

Händelser låter dig köra funktioner parallellt med hjälp av händelseobjekt. Istället för att anropa funktioner eller trådar efter varandra, låter händelser dig registrera funktioner och sedan utlösa dem alla samtidigt. Varje registrerad funktion körs i sin egen tråd, så din robot kan göra flera saker – som att blinka TouchLED-lampor och köra – samtidigt.

Nedan följer en lista över tillgängliga metoder och konstruktorer:

  • Event – Skapar ett nytt händelseobjekt.

  • broadcast – Utlöser att alla registrerade funktioner i ett händelseobjekt körs parallellt.

  • broadcast_and_wait – Utlöser alla registrerade funktioner i ett händelseobjekt och väntar på att de ska slutföras innan den fortsätter.

  • event – Registrerar en funktion till händelseobjektet, eventuellt med argument.

Create an Event Object#

Event skapar ett händelseobjekt som hanterar funktionskörning i separata trådar.

Usage:
Event()

Parameter

Beskrivning

Denna konstruktor har inga parametrar.

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 utlöser en händelse, vilket startar alla registrerade funktioner i separata trådar. Den här metoden pausar inte körningen av några efterföljande funktioner.

Usage:
my_event.broadcast()

Parameter

Beskrivning

event

Namnet på det tidigare skapade händelseobjektet.

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 startar en händelse men väntar tills alla registrerade funktioner är klara innan den fortsätter med efterföljande funktioner.

Usage:
my_event.broadcast_and_wait()

Parameter

Beskrivning

event

Namnet på det tidigare skapade händelseobjektet.

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#

När du registrerar en funktion till en händelse kommer den att köras i en separat tråd när händelsen sänds.

Usage:
event(callback, args)

Parameter

Beskrivning

event

Namnet på det tidigare skapade händelseobjektet.

callback

En tidigare definierad funktion som ska köras när händelsen sänds.

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)