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ả |
|---|---|
|
Tùy chọn. Tên cho chủ đề mới. |
|
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.
def move_square():
# Move in a square path
while True:
arm.move_inc(100, 0, 0)
arm.move_inc(0, 100, 0)
arm.move_inc(-100, 0, 0)
arm.move_inc(0, 100, 0)
move_square_thread = Thread(move_square)
signal_tower.set_color(SignalTower.BLUE, SignalTower.BLINK)
# Run multiple threads simultaneously
def move_square():
# Move in a square path
while True:
arm.move_inc(100, 0, 0)
arm.move_inc(0, 100, 0)
arm.move_inc(-100, 0, 0)
arm.move_inc(0, 100, 0)
def lights():
while True:
# Turn on all LEDs
signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
wait(0.25, SECONDS)
# Turn on just the red LED
signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
wait(0.25, SECONDS)
move_square_thread = Thread(move_square)
lights_thread = Thread(lights)
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 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ả |
|---|---|
|
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 |
"""
Run multiple threads simultaneously
Move the end effector, flash lights and display the x position at once
Stop blinking after 2 seconds
"""
def lights():
while True:
# Turn on all LEDs
signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
wait(0.25, SECONDS)
# Turn on just the red LED
signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
wait(0.25, SECONDS)
def display_x():
while True:
brain.clear_row()
brain.set_cursor(1, 1)
brain.print("X Position: {}".format(arm.get_x()))
wait(50, MSEC)
lights_thread = Thread(lights)
display_x_thread = Thread(display_x)
arm.move_to(200, 140, 210)
wait(2, SECONDS)
lights_thread.stop()