Các sợi chỉ#

Giới thiệu#

Luồng (thread) cho phép robot thực hiện nhiều tác vụ đồng thời trong cùng một chương trình. Chúng tạo điều kiện cho đa nhiệm, cho phép robot thực hiện các hành động độc lập cùng một lúc.

Lưu ý: Bạn phải định nghĩa một hàm trước để sử dụng nó với một luồng.

Hàm khởi tạo – Tạo và bắt đầu các luồng mới.

  • Thread – Bắt đầu một luồng mới chạy chức năng được chỉ định song song với chương trình chính.

Thao tác – Điều khiển các luồng đang chạy.

  • stop – Dừng một luồng theo cách thủ công, hữu ích để dừng hành vi nền.

Người xây dựng#

Thread#

Thread tạo và khởi động một luồng. Khi tạo một luồng, bạn có thể đặt tên cho nó để dừng nó khi không còn cần thiết nữa.

Cách sử dụng:

my_thread = Thread(my_function)

Thông số

Sự miêu tả

my_thread

Tùy chọn. Tên cho chủ đề mới.

my_function

Tên của một hàm. đã được định nghĩa trước đó.

Note: A function must always be defined before it is called.

# 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)

Hoạt động#

stop#

stop dừng một luồng theo cách thủ công, điều này hữu ích khi một tác vụ không còn cần thiết nữa hoặc khi một chương trình cần đặt lại các luồng. Sau khi một luồng bị dừng, nó không thể được khởi động lại. Để chạy lại, bạn phải tạo một luồng mới bằng cách sử dụng Thread.

Cách sử dụng:

my_thread.stop()

Thông số

Sự miêu tả

my_thread

Một đối tượng luồng đã được khởi tạo trước đó. Đây là tên được gán khi luồng được tạo bằng lệnh 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()