Εκδηλώσεις#
Εισαγωγή#
Τα συμβάντα σάς επιτρέπουν να εκτελείτε συναρτήσεις παράλληλα. Αντί να καλείτε συναρτήσεις διαδοχικά, μπορείτε να καταχωρίσετε πολλές συναρτήσεις σε ένα συμβάν και να τις ενεργοποιήσετε όλες ταυτόχρονα. Κάθε καταχωρημένη συνάρτηση εκτελείται στο δικό της νήμα, επιτρέποντας στο ρομπότ σας να εκτελεί πολλαπλές εργασίες ταυτόχρονα, όπως την εμφάνιση τιμών στην οθόνη κατά την οδήγηση.
Για να δημιουργήσετε και στη συνέχεια να χρησιμοποιήσετε ένα Συμβάν, ακολουθήστε τα παρακάτω βήματα με τη σειρά:
Δημιουργήστε το συμβάν με
Συμβάν.Καταχωρίστε μια συνάρτηση που θα ενεργοποιείται όταν μεταδίδεται το Συμβάν
καλώντας το αντικείμενοσυμβάνμε τη συνάρτηση ως όρισμα.Broadcast an
Event:broadcast– Ενεργοποιεί όλες τις καταχωρημένες συναρτήσεις σε ένα αντικείμενο συμβάντος ώστε να εκτελούνται ταυτόχρονα.broadcast_and_wait– Ενεργοποιεί όλες τις καταχωρημένες συναρτήσεις σε ένα αντικείμενο συμβάντος και περιμένει να ολοκληρωθούν πριν συνεχίσει.
Δημιουργήστε ένα συμβάν#
Το Συμβάν δημιουργεί ένα αντικείμενο συμβάντος που διαχειρίζεται την εκτέλεση συνάρτησης σε ξεχωριστά νήματα.
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)
Παράμετρος
Περιγραφή
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#
Η εκπομπή ενεργοποιεί ένα συμβάν, ξεκινώντας όλες τις καταχωρημένες συναρτήσεις σε ξεχωριστά νήματα. Αυτή η μέθοδος δεν διακόπτει την εκτέλεση οποιωνδήποτε επόμενων συναρτήσεων.
Usage:
event.broadcast()
Παράμετρος
Περιγραφή
event
Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως.
# 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 ξεκινά ένα συμβάν αλλά περιμένει να ολοκληρωθούν όλες οι καταχωρημένες συναρτήσεις πριν συνεχίσει με τις επόμενες συναρτήσεις.
Usage:
event.broadcast_and_wait()
Παράμετρος
Περιγραφή
event
Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως.
# 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.")