Події#

Вступ#

Події дозволяють запускати функції паралельно за допомогою об’єктів подій. Замість того, щоб викликати функції або потоки одну за одною, події дозволяють реєструвати функції, а потім запускати їх усі одночасно. Кожна зареєстрована функція виконується у власному потоці, тому ваш робот може виконувати кілька речей одночасно, наприклад, блимати TouchLED та керувати автомобілем.

Нижче наведено список доступних методів та конструкторів:

  • Event – Створює новий об’єкт події.

  • broadcast – Запускає паралельний запуск усіх зареєстрованих функцій в об’єкті події.

  • broadcast_and_wait – Запускає всі зареєстровані функції в об’єкті події та очікує їх завершення, перш ніж продовжити.

  • event – Реєструє функцію в об’єкті події, за бажанням з аргументами.

Create an Event Object#

Event створює об’єкт події, який керує виконанням функцій в окремих потоках.

Usage:
Event()

Параметр

Опис

Цей конструктор не має параметрів.

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 запускає подію, запускаючи всі зареєстровані функції в окремих потоках. Цей метод не призупиняє виконання жодних наступних функцій.

Usage:
my_event.broadcast()

Параметр

Опис

event

Ім’я раніше створеного об’єкта події.

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 запускає подію, але очікує завершення всіх зареєстрованих функцій, перш ніж продовжити виконання наступних функцій.

Usage:
my_event.broadcast_and_wait()

Параметр

Опис

event

Ім’я раніше створеного об’єкта події.

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#

Коли ви реєструєте функцію для події, вона виконуватиметься в окремому потоці під час трансляції події.

Usage:
event(callback, args)

Параметр

Опис

event

Ім’я раніше створеного об’єкта події.

callback

Попередньо визначена функція, яка виконується під час трансляції події.

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)