Εκδηλώσεις#
Εισαγωγή#
Τα συμβάντα σάς επιτρέπουν να εκτελείτε συναρτήσεις παράλληλα. Αντί να καλείτε συναρτήσεις διαδοχικά, μπορείτε να καταχωρίσετε πολλές συναρτήσεις σε ένα συμβάν και να τις ενεργοποιήσετε όλες ταυτόχρονα. Κάθε καταχωρημένη συνάρτηση εκτελείται στο δικό της νήμα, επιτρέποντας στο ρομπότ σας να εκτελεί πολλαπλές εργασίες ταυτόχρονα, όπως την εμφάνιση τιμών στην οθόνη κατά την οδήγηση.
Για να δημιουργήσετε και στη συνέχεια να χρησιμοποιήσετε ένα Συμβάν, ακολουθήστε τα παρακάτω βήματα με τη σειρά:
Create the event with
Event.Register a function to trigger when the
Eventis broadcast by calling theeventobject with the function as an argument.Broadcast an
Event:broadcast– Triggers all registered functions in an event object to run concurrently.broadcast_and_wait– Triggers all registered functions in an event object and waits for them to finish before continuing.
Δημιουργήστε ένα συμβάν#
Event creates an event object that manages function execution in separate threads.
Usage:
Event()
Παράμετρος |
Περιγραφή |
|---|---|
Αυτός ο κατασκευαστής δεν έχει παραμέτρους. |
# Blink LEDs while moving forward
# Create move_event as an Event object
move_event = Event()
def blink_leds():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)
wait(0.5, SECONDS)
move_event(blink_leds)
move_event.broadcast()
robot.move_at(0)
Εγγραφή συναρτήσεων σε ένα συμβάν#
Όταν καταχωρείτε μια συνάρτηση σε ένα συμβάν, αυτή θα εκτελεστεί σε ξεχωριστό νήμα κατά την μετάδοση του συμβάντος.
Usage:
event(callback, args)
Παράμετρος |
Περιγραφή |
|---|---|
|
Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως. |
|
Μια εκ των προτέρων καθορισμένη συνάρτηση που θα εκτελεστεί κατά την μετάδοση του συμβάντος. |
|
Προαιρετικό. Μια πλειάδα ορισμάτων που θα διαβιβαστεί στη συνάρτηση επανάκλησης. |
# Blink LEDs while moving forward and turning
move_event = Event()
def blink_leds():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)
wait(0.5, SECONDS)
def turning():
robot.turn(RIGHT)
# Register multiple functions to the Event object
move_event(blink_leds)
move_event(turning)
move_event.broadcast()
# Move in a specified direction
move_event = Event()
def move_distance(movement_angle):
robot.move_for(50, movement_angle)
# Change the parameter to modify how the robot moves
move_event(move_distance, (180,))
move_event.broadcast()
Μετάδοση ενός συμβάντος#
broadcast#
broadcast triggers an event, starting all registered functions in separate threads. This method does not pause execution of any subsequent functions.
Usage:
event.broadcast()
Παράμετρος |
Περιγραφή |
|---|---|
|
Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως. |
# Blink LEDs while moving forward and turning
move_event = Event()
def blink_leds():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)
wait(0.5, SECONDS)
move_event(blink_leds)
# Trigger the move_event Event
move_event.broadcast()
robot.move_at(0)
broadcast_and_wait#
broadcast_and_wait starts an event but waits for all registered functions to finish before continuing with subsequent functions.
Usage:
event.broadcast_and_wait()
Παράμετρος |
Περιγραφή |
|---|---|
|
Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως. |
# Move after the screen is pressed
move_event = Event()
def move_and_turn():
robot.move_for(50, 0)
robot.turn_for(RIGHT, 90)
move_event(move_and_turn)
while True:
if robot.screen.pressing():
move_event.broadcast_and_wait()
break
robot.screen.print("Movement done.")