Événements#
Introduction#
Les événements permettent d’exécuter des fonctions en parallèle grâce à des objets événementiels. Au lieu d’appeler les fonctions ou les threads les uns après les autres, les événements permettent d’enregistrer des fonctions puis de les déclencher simultanément. Chaque fonction enregistrée s’exécute dans son propre thread, ce qui permet à votre robot d’effectuer plusieurs tâches en même temps, comme faire clignoter des LED tactiles et se déplacer.
Vous trouverez ci-dessous la liste des méthodes et constructeurs disponibles :
Event– Crée un nouvel objet événement.broadcast– Déclenche l’exécution en parallèle de toutes les fonctions enregistrées dans un objet événement.broadcast_and_wait– Déclenche toutes les fonctions enregistrées dans un objet événement et attend qu’elles se terminent avant de continuer.event– Enregistre une fonction dans l’objet événement, éventuellement avec des arguments.
Create an Event Object#
L’événement Event crée un objet événement qui gère l’exécution des fonctions dans des threads séparés.
Usage:
Event()
Paramètre |
Description |
|---|---|
Ce constructeur n’a pas de paramètres. |
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#
La diffusion broadcast déclenche un événement, lançant toutes les fonctions enregistrées dans des threads séparés. Cette méthode n’interrompt pas l’exécution des fonctions suivantes.
Usage:
my_event.broadcast()
Paramètre |
Description |
|---|---|
|
Le nom de l’objet événement précédemment créé. |
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 lance un événement mais attend que toutes les fonctions enregistrées se terminent avant de poursuivre avec les fonctions suivantes.
Usage:
my_event.broadcast_and_wait()
Paramètre |
Description |
|---|---|
|
Le nom de l’objet événement précédemment créé. |
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#
Lorsque vous enregistrez une fonction pour un événement, elle s’exécutera dans un thread séparé lorsque l’événement sera diffusé.
Usage:
event(callback, args)
Paramètre |
Description |
|---|---|
|
Le nom de l’objet événement précédemment créé. |
|
Une fonction préalablement définie à exécuter lorsque l’événement est diffusé. |
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)