События#
Введение#
События позволяют выполнять функции параллельно. Вместо последовательного вызова функций можно зарегистрировать несколько функций в одном событии и запустить их все одновременно. Каждая зарегистрированная функция выполняется в собственном потоке, что позволяет роботу выполнять несколько задач одновременно — например, отображать значения на экране во время движения.
Для создания и последующего использования события выполните следующие действия в указанном порядке:
Создайте событие с
Event.Зарегистрируйте функцию, которая будет запускаться при трансляции события
Eventпутем вызова объектаeventobject с функцией в качестве аргумента.Broadcast an
Event:broadcast– Запускает все зарегистрированные функции в объекте события для одновременного выполнения.broadcast_and_wait– Запускает все зарегистрированные функции в объекте события и ожидает их завершения, прежде чем продолжить.
Создать событие#
Событие Event создает объект события, который управляет выполнением функции в отдельных потоках.
Usage:
Event()
Параметр |
Описание |
|---|---|
Этот конструктор не имеет параметров. |
def move_square():
for index in range(4):
drivetrain.drive_for(FORWARD, 150)
drivetrain.turn_for(RIGHT, 90)
# *** Creating the move_event Event ***
move_event = Event()
# Register move_square to move_event
move_event(move_square)
# Call all functions registered to move_event
move_event.broadcast()
Регистрация функций для мероприятия#
При регистрации функции для события она будет выполняться в отдельном потоке после трансляции события.
Usage:
event(callback, args)
Параметр |
Описание |
|---|---|
|
Имя ранее созданного объекта события. |
|
Заранее определенная функция, которая будет выполнена при трансляции события. |
|
Optional. A tuple of arguments to pass to the callback function. |
def move_square():
for index in range(4):
drivetrain.drive_for(FORWARD, 150)
drivetrain.turn_for(RIGHT, 90)
# Creating the move_event Event
move_event = Event()
# *** Register move_square to move_event ***
move_event(move_square)
# Call all functions registered to move_event
move_event.broadcast()
Трансляция мероприятия#
broadcast#
broadcast запускает событие, приводящее к запуску всех зарегистрированных функций в отдельных потоках. Этот метод не приостанавливает выполнение каких-либо последующих функций.
Usage:
event.broadcast()
Параметр |
Описание |
|---|---|
|
Имя ранее созданного объекта события. |
# 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)
move_event = Event()
move_event(move_square)
# Broadcasting the move_event Event
move_event.broadcast()
optical_sensor.set_light_power(100, PERCENT)
broadcast_and_wait#
broadcast_and_wait запускает событие, но ожидает завершения всех зарегистрированных функций, прежде чем продолжить выполнение последующих функций.
Usage:
event.broadcast_and_wait()
Параметр |
Описание |
|---|---|
|
Имя ранее созданного объекта события. |
def move_square():
for index in range(4):
drivetrain.drive_for(FORWARD, 150)
drivetrain.turn_for(RIGHT, 90)
# 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()
optical_sensor.set_light_power(100, PERCENT)