Νήματα#

Εισαγωγή#

Τα νήματα επιτρέπουν σε ένα ρομπότ να εκτελεί πολλαπλές εργασίες ταυτόχρονα μέσα στο ίδιο πρόγραμμα. Επιτρέπουν την εκτέλεση πολλαπλών εργασιών, επιτρέποντας στο ρομπότ να εκτελεί ανεξάρτητες ενέργειες ταυτόχρονα.

Σημείωση: Πρέπει πρώτα να ορίσετε μια συνάρτηση για να τη χρησιμοποιήσετε με ένα νήμα.

Κατασκευαστής – Δημιουργήστε και ξεκινήστε νέα νήματα.

  • Thread – Ξεκινά ένα νέο νήμα που εκτελεί την καθορισμένη συνάρτηση παράλληλα με το κύριο πρόγραμμα.

Ενέργεια – Έλεγχος των τρεχούμενων νημάτων.

  • stop – Διακόπτει ένα νήμα χειροκίνητα, χρήσιμο για την αναστολή της συμπεριφοράς στο παρασκήνιο.

Κατασκευαστής#

Thread#

Thread δημιουργεί και ξεκινά ένα νήμα. Όταν δημιουργείτε ένα νήμα, μπορείτε να το ονομάσετε για να το σταματήσετε όταν δεν χρειάζεται πλέον.

Χρήση:

my_thread = Thread(my_function)

Παράμετροι

Περιγραφή

my_thread

Προαιρετικό. Ένα όνομα για το νέο νήμα.

my_function

Το όνομα μιας προηγουμένως ορισμένης συνάρτησης.

Σημείωση: Μια συνάρτηση πρέπει πάντα να ορίζεται πριν την κλήση της.

# Drive forward while blinking lights
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, BLUE)
        wait(0.5, SECONDS)
blink_lights_thread = Thread(blink_lights)
robot.move_at(0)

# Run multiple threads simultaneously
# Turn right, blink lights and display heading at once
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, GREEN)
        wait(0.5, SECONDS)

def display_heading():
    while True:
        robot.screen.clear_row()
        robot.screen.set_cursor(1, 1)
        robot.screen.print(f"Heading: {robot.inertial.get_yaw()}")
        wait(50, MSEC)

blink_lights_thread = Thread(blink_lights)     
display_heading_thread = Thread(display_heading)
robot.turn(RIGHT)

Δράση#

stop#

Η εντολή stop σταματά ένα νήμα χειροκίνητα, κάτι που είναι χρήσιμο όταν μια εργασία δεν χρειάζεται πλέον ή όταν ένα πρόγραμμα χρειάζεται να επαναφέρει τα νήματα. Μόλις διακοπεί ένα νήμα, δεν μπορεί να επανεκκινηθεί. Για να το εκτελέσετε ξανά, πρέπει να δημιουργήσετε ένα νέο νήμα χρησιμοποιώντας το Thread.

Χρήση:

my_thread.stop()

Παράμετροι

Περιγραφή

my_thread

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

"""
Run multiple threads simultaneously
Turn right, blink lights and display heading at once
Stop blinking lights after 2 seconds
"""
def blink_lights():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.off(ALL_LEDS)
        wait(0.5, SECONDS)

def display_heading():
    while True:
        robot.screen.clear_row()
        robot.screen.set_cursor(1, 1)
        robot.screen.print(f"Heading: {robot.inertial.get_yaw()}")
        wait(50, MSEC)

blink_lights_thread = Thread(blink_lights)     
display_heading_thread = Thread(display_heading)
robot.turn(RIGHT)

wait(2, SECONDS)
blink_lights_thread.stop()