Εκδηλώσεις#

Εισαγωγή#

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

Παρακάτω είναι μια λίστα με τις διαθέσιμες μεθόδους και κατασκευαστές:

  • Event – Δημιουργεί ένα νέο αντικείμενο συμβάντος.

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

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

  • event – Καταχωρεί μια συνάρτηση στο αντικείμενο συμβάντος, προαιρετικά με ορίσματα.

Create an Event Object#

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

Usage:
Event()

Παράμετρος

Περιγραφή

Αυτός ο κατασκευαστής δεν έχει παραμέτρους.

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#

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

Usage:
my_event.broadcast()

Παράμετρος

Περιγραφή

event

Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως.

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 ξεκινά ένα συμβάν αλλά περιμένει να ολοκληρωθούν όλες οι καταχωρημένες συναρτήσεις πριν συνεχίσει με τις επόμενες συναρτήσεις.

Usage:
my_event.broadcast_and_wait()

Παράμετρος

Περιγραφή

event

Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως.

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#

Όταν καταχωρείτε μια συνάρτηση σε ένα συμβάν, αυτή θα εκτελεστεί σε ξεχωριστό νήμα κατά την μετάδοση του συμβάντος.

Usage:
event(callback, args)

Παράμετρος

Περιγραφή

event

Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως.

callback

Μια εκ των προτέρων καθορισμένη συνάρτηση που θα εκτελεστεί κατά την μετάδοση του συμβάντος.

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)