Εκδηλώσεις#

Εισαγωγή#

Τα συμβάντα σάς επιτρέπουν να εκτελείτε συναρτήσεις παράλληλα. Αντί να καλείτε συναρτήσεις διαδοχικά, μπορείτε να καταχωρίσετε πολλές συναρτήσεις σε ένα συμβάν και να τις ενεργοποιήσετε όλες ταυτόχρονα. Κάθε καταχωρημένη συνάρτηση εκτελείται στο δικό της νήμα, επιτρέποντας στο ρομπότ σας να εκτελεί πολλαπλές εργασίες ταυτόχρονα, όπως την εμφάνιση τιμών στην οθόνη κατά την οδήγηση.

Για να δημιουργήσετε και στη συνέχεια να χρησιμοποιήσετε ένα Συμβάν, ακολουθήστε τα παρακάτω βήματα με τη σειρά:

  1. Δημιουργήστε το συμβάν με Event.

  2. Register a function to trigger when the Event is broadcast by calling the event object with the function as an argument.

  3. Broadcast an Event:

    • broadcast – Ενεργοποιεί όλες τις καταχωρημένες συναρτήσεις σε ένα αντικείμενο συμβάντος ώστε να εκτελούνται ταυτόχρονα.

    • broadcast_and_wait – Ενεργοποιεί όλες τις καταχωρημένες συναρτήσεις σε ένα αντικείμενο συμβάντος και περιμένει να ολοκληρωθούν πριν συνεχίσει.

Δημιουργήστε ένα συμβάν#

Event δημιουργεί ένα αντικείμενο συμβάντος που διαχειρίζεται την εκτέλεση συνάρτησης σε ξεχωριστά νήματα.

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#

Η εκπομπή 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.")