События#
Введение#
События позволяют выполнять функции параллельно. Вместо последовательного вызова функций можно зарегистрировать несколько функций в одном событии и запустить их все одновременно. Каждая зарегистрированная функция выполняется в собственном потоке, что позволяет роботу выполнять несколько задач одновременно — например, отображать значения на экране во время движения.
Для создания и последующего использования события выполните следующие действия в указанном порядке:
Создайте событие с
Event.Зарегистрируйте функцию, которая будет запускаться при трансляции события
Eventпутем вызова объектаeventobject с функцией в качестве аргумента.Broadcast an
Event:broadcast— Запускает все зарегистрированные функции в объекте события для одновременного выполнения.broadcast_and_wait— Запускает все зарегистрированные функции в объекте события и ожидает их завершения, прежде чем продолжить.
Создать событие#
Событие Event создает объект события, который управляет выполнением функции в отдельных потоках.
Usage:
Event()
Параметр |
Описание |
|---|---|
Этот конструктор не имеет параметров. |
# Blink the screen while moving forward
# Create move_event as an Event object
move_event = Event()
def blink_screen():
while True:
brain.screen.clear_screen(Color.RED)
wait(0.5, SECONDS)
brain.screen.clear_screen()
wait(0.5, SECONDS)
move_event(blink_screen)
move_event.broadcast()
drivetrain.drive(FORWARD)
Регистрация функций для мероприятия#
При регистрации функции для события она будет выполняться в отдельном потоке после трансляции события.
Usage:
event(callback, args)
Параметр |
Описание |
|---|---|
|
Имя ранее созданного объекта события. |
|
Заранее определенная функция, которая будет выполнена при трансляции события. |
|
Optional. A tuple of arguments to pass to the callback function. |
# Blink the screen while turning
move_event = Event()
def blink_screen():
while True:
brain.screen.clear_screen(Color.RED)
wait(0.5, SECONDS)
brain.screen.clear_screen()
wait(0.5, SECONDS)
def turning():
drivetrain.turn(RIGHT)
# Register multiple functions to the Event object
move_event(blink_screen)
move_event(turning)
move_event.broadcast()
# Move in a specified direction
move_event = Event()
def move_distance(movement_angle):
drivetrain.turn_for(RIGHT, movement_angle, DEGREES)
drivetrain.drive_for(FORWARD, 100, MM)
# Change the parameter to modify how the robot moves
move_event(move_distance, (180,))
move_event.broadcast()
Трансляция мероприятия#
broadcast#
broadcast запускает событие, приводящее к запуску всех зарегистрированных функций в отдельных потоках. Этот метод не приостанавливает выполнение каких-либо последующих функций.
Usage:
event.broadcast()
Параметр |
Описание |
|---|---|
|
Имя ранее созданного объекта события. |
# Blink the screen while moving forward
# Create move_event as an Event object
move_event = Event()
def blink_screen():
while True:
brain.screen.clear_screen(Color.RED)
wait(0.5, SECONDS)
brain.screen.clear_screen()
wait(0.5, SECONDS)
move_event(blink_screen)
move_event.broadcast()
drivetrain.drive(FORWARD)
broadcast_and_wait#
broadcast_and_wait запускает событие, но ожидает завершения всех зарегистрированных функций, прежде чем продолжить выполнение последующих функций.
Usage:
event.broadcast_and_wait()
Параметр |
Описание |
|---|---|
|
Имя ранее созданного объекта события. |
# Move after the screen is pressed
move_event = Event()
def move_and_turn():
drivetrain.drive_for(FORWARD, 150, MM)
drivetrain.turn_for(RIGHT, 90)
move_event(move_and_turn)
while True:
if brain.buttonCheck.pressing():
move_event.broadcast_and_wait()
break
brain.screen.print("Movement done.")