线程#

介绍#

线程允许机器人在同一个程序中同时运行多个任务。它们支持多任务处理,让机器人可以同时执行独立的操作。

**注意:**您必须[首先定义一个函数](Functions.md)才能将其与线程一起使用。

构造函数——创建并启动新线程。

  • Thread – Starts a new thread that runs the specified function in parallel with the main program.

操作 – 控制正在运行的线程。

  • stop – Stops a thread manually, useful for halting background behavior.

构造函数#

Thread#

Thread creates and starts a thread. When you create a thread, you can name it to manage it individually in your project.

用法:

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 stops a thread manually, which is useful when a task is no longer needed or when a program needs to reset or reassign threads. Once a thread is stopped, it cannot be restarted. To run it again, you must create a new thread using Thread.

用法:

my_thread.stop()

参数

描述

my_thread

A previously started thread object. This is the name assigned when the thread was created using 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()