Wydarzenia#

Wstęp#

Zdarzenia umożliwiają równoległe uruchamianie funkcji za pomocą obiektów zdarzeń. Zamiast wywoływać funkcje lub wątki jedno po drugim, zdarzenia pozwalają zarejestrować funkcje, a następnie uruchomić je wszystkie jednocześnie. Każda zarejestrowana funkcja działa we własnym wątku, dzięki czemu robot może wykonywać wiele czynności – takich jak miganie diodami TouchLED i sterowanie – jednocześnie.

Poniżej znajduje się lista dostępnych metod i konstruktorów:

  • Event – Tworzy nowy obiekt zdarzenia.

  • broadcast – Uruchamia wszystkie zarejestrowane funkcje w obiekcie zdarzenia, aby działały równolegle.

  • broadcast_and_wait – Uruchamia wszystkie zarejestrowane funkcje w obiekcie zdarzenia i czeka na ich zakończenie przed kontynuowaniem.

  • event – Rejestruje funkcję w obiekcie zdarzenia, opcjonalnie z argumentami.

Create an Event Object#

Event tworzy obiekt zdarzenia, który zarządza wykonywaniem funkcji w oddzielnych wątkach.

Usage:
Event()

Parametr

Opis

Ten konstruktor nie ma żadnych parametrów.

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 wyzwala zdarzenie, uruchamiając wszystkie zarejestrowane funkcje w oddzielnych wątkach. Ta metoda nie wstrzymuje wykonywania żadnych kolejnych funkcji.

Usage:
my_event.broadcast()

Parametr

Opis

event

Nazwa wcześniej utworzonego obiektu zdarzenia.

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 rozpoczyna zdarzenie, ale czeka na zakończenie wszystkich zarejestrowanych funkcji, zanim przejdzie do wykonywania kolejnych funkcji.

Usage:
my_event.broadcast_and_wait()

Parametr

Opis

event

Nazwa wcześniej utworzonego obiektu zdarzenia.

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#

Gdy zarejestrujesz funkcję dla zdarzenia, zostanie ona wykonana w osobnym wątku, gdy zdarzenie zostanie rozgłoszone.

Usage:
event(callback, args)

Parametr

Opis

event

Nazwa wcześniej utworzonego obiektu zdarzenia.

callback

Wcześniej zdefiniowana funkcja, która ma zostać wykonana po rozesłaniu zdarzenia.

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)