Eventos#
Introdução#
Os eventos permitem executar funções em paralelo utilizando objetos de evento. Em vez de chamar funções ou threads uma após a outra, os eventos permitem registar funções e acioná-las simultaneamente. Cada função registada é executada no seu próprio thread, permitindo que o seu robô realize várias tarefas — como piscar LEDs sensíveis ao toque e movimentar-se — ao mesmo tempo.
Segue-se uma lista dos métodos e construtores disponíveis:
Event– Cria um novo objeto de evento.broadcast– Aciona todas as funções registadas num objeto de evento para serem executadas em paralelo.broadcast_and_wait– Aciona todas as funções registadas num objeto de evento e espera que terminem antes de continuar.event– Regista uma função no objeto de evento, opcionalmente com argumentos.
Create an Event Object#
Event cria um objeto de evento que gere a execução de funções em threads separados.
Usage:
Event()
Parâmetro |
Descrição |
|---|---|
Este construtor não possui parâmetros. |
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#
O comando broadcast dispara um evento, iniciando todas as funções registadas em threads separados. Este método não pausa a execução de nenhuma função subsequente.
Usage:
my_event.broadcast()
Parâmetro |
Descrição |
|---|---|
|
O nome do objeto de evento criado anteriormente. |
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 inicia um evento, mas espera que todas as funções registadas terminem antes de continuar com as funções subsequentes.
Usage:
my_event.broadcast_and_wait()
Parâmetro |
Descrição |
|---|---|
|
O nome do objeto de evento criado anteriormente. |
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#
Ao registar uma função para um evento, esta será executada num thread separado quando o evento for transmitido.
Usage:
event(callback, args)
Parâmetro |
Descrição |
|---|---|
|
O nome do objeto de evento criado anteriormente. |
|
Uma função previamente definida para ser executada quando o evento é transmitido. |
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)