События#

Введение#

События позволяют выполнять функции параллельно. Вместо последовательного вызова функций можно зарегистрировать несколько функций в одном событии и запустить их все одновременно. Каждая зарегистрированная функция выполняется в собственном потоке, что позволяет роботу выполнять несколько задач одновременно — например, отображать значения на экране во время движения.

Для создания и последующего использования события выполните следующие действия в указанном порядке:

  1. Создайте событие с Event.

  2. Зарегистрируйте функцию, которая будет запускаться при трансляции события Event путем вызова объекта event object с функцией в качестве аргумента.

  3. Broadcast an Event:

    • broadcast – Запускает все зарегистрированные функции в объекте события для одновременного выполнения.

    • broadcast_and_wait – Запускает все зарегистрированные функции в объекте события и ожидает их завершения, прежде чем продолжить.

Создать событие#

Событие Event создает объект события, который управляет выполнением функции в отдельных потоках.

Usage:
Event()

Параметры

Описание

Этот конструктор не имеет параметров.

# Build Used: Super Code Base 2.0
def move_square():
    for index in range(4):
        drivetrain.drive_for(FORWARD, 150)
        drivetrain.turn_for(RIGHT, 90)

def main():
    # Creating the move_event Event
    move_event = Event()
    move_event(move_square)
    move_event.broadcast()
    bumper.set_color(GREEN)

# Start threads — Do not delete
start_thread(main)

Регистрация функций для мероприятия#

При регистрации функции для события она будет выполняться в отдельном потоке после трансляции события.

Usage:
event(callback, args)

Параметры

Описание

event

Имя ранее созданного объекта события.

callback

Заранее определенная функция, которая будет выполнена при трансляции события.

args

Optional. A tuple of arguments to pass to the callback function.

# Build Used: Super Code Base 2.0
def move_square():
    for index in range(4):
        drivetrain.drive_for(FORWARD, 150)
        drivetrain.turn_for(RIGHT, 90)

def main():
    move_event = Event()
    # Register the move_square function to the move_event Event
    move_event(move_square)
    move_event.broadcast()
    bumper.set_color(GREEN)

# Start threads — Do not delete
start_thread(main)

Трансляция мероприятия#

broadcast#

broadcast запускает событие, приводящее к запуску всех зарегистрированных функций в отдельных потоках. Этот метод не приостанавливает выполнение какого-либо последующего кода.

Usage:
event.broadcast()

Параметры

Описание

event

Имя ранее созданного объекта события.

# Build Used: Super Code Base 2.0
def move_square():
    for index in range(4):
        drivetrain.drive_for(FORWARD, 150)
        drivetrain.turn_for(RIGHT, 90)

def main():
    move_event = Event()
    move_event(move_square)
    # Broadcasting the move_event Event
    move_event.broadcast()
    bumper.set_color(GREEN)

# Start threads — Do not delete
start_thread(main)

broadcast_and_wait#

broadcast_and_wait запускает событие, но ожидает завершения всех зарегистрированных функций, прежде чем продолжить выполнение последующих функций.

Usage:
event.broadcast_and_wait()

Параметры

Описание

event

Имя ранее созданного объекта события.

# Build Used: Super Code Base 2.0
def move_square():
    for index in range(4):
        drivetrain.drive_for(FORWARD, 150)
        drivetrain.turn_for(RIGHT, 90)

def main():
    # Set up and call the move_square event
    move_event = Event()
    move_event(move_square)
    # Broadcast the move_event Event and wait
    move_event.broadcast_and_wait()
    bumper.set_color(GREEN)

# Start threads — Do not delete
start_thread(main)