Εκδηλώσεις#
Εισαγωγή#
Τα συμβάντα σάς επιτρέπουν να εκτελείτε συναρτήσεις παράλληλα χρησιμοποιώντας αντικείμενα συμβάντων. Αντί να καλείτε συναρτήσεις ή νήματα το ένα μετά το άλλο, τα συμβάντα σάς επιτρέπουν να καταχωρείτε συναρτήσεις και στη συνέχεια να τις ενεργοποιείτε όλες ταυτόχρονα. Κάθε καταχωρημένη συνάρτηση εκτελείται στο δικό της νήμα, επομένως το ρομπότ σας μπορεί να κάνει πολλά πράγματα—όπως να αναβοσβήνει τα TouchLED και να οδηγεί—ταυτόχρονα.
Παρακάτω είναι μια λίστα με τις διαθέσιμες μεθόδους και κατασκευαστές:
Event– Creates a new event object.broadcast– Triggers all registered functions in an event object to run in parallel.broadcast_and_wait– Triggers all registered functions in an event object and waits for them to finish before continuing.event– Registers a function to the event object, optionally with arguments.
Create an Event Object#
Event creates an event object that manages function execution in separate threads.
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 triggers an event, starting all registered functions in separate threads. This method does not pause execution of any subsequent functions.
Usage:
my_event.broadcast()
Παράμετρος |
Περιγραφή |
|---|---|
|
Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως. |
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 starts an event but waits for all registered functions to finish before continuing with subsequent functions.
Usage:
my_event.broadcast_and_wait()
Παράμετρος |
Περιγραφή |
|---|---|
|
Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως. |
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)
Παράμετρος |
Περιγραφή |
|---|---|
|
Το όνομα του αντικειμένου συμβάντος που δημιουργήθηκε προηγουμένως. |
|
Μια εκ των προτέρων καθορισμένη συνάρτηση που θα εκτελεστεί κατά την μετάδοση του συμβάντος. |
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)