Події#
Вступ#
Події дозволяють запускати функції паралельно за допомогою об’єктів подій. Замість того, щоб викликати функції або потоки одну за одною, події дозволяють реєструвати функції, а потім запускати їх усі одночасно. Кожна зареєстрована функція виконується у власному потоці, тому ваш робот може виконувати кілька речей одночасно, наприклад, блимати 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()
Параметр |
Опис |
|---|---|
|
Ім’я раніше створеного об’єкта події. |
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()
Параметр |
Опис |
|---|---|
|
Ім’я раніше створеного об’єкта події. |
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)
Параметр |
Опис |
|---|---|
|
Ім’я раніше створеного об’єкта події. |
|
Попередньо визначена функція, яка виконується під час трансляції події. |
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)