الخيوط#
مقدمة#
تتيح الخيوط البرمجية للروبوت تشغيل مهام متعددة في وقت واحد ضمن البرنامج نفسه. فهي تمكّن الروبوت من أداء مهام متعددة، مما يسمح له بتنفيذ إجراءات مستقلة في الوقت نفسه.
ملاحظة: يجب عليك أولاً تعريف دالة لاستخدامها مع سلسلة العمليات.
الدالة البانية – إنشاء وبدء سلاسل عمليات جديدة.
Thread– يبدأ سلسلة جديدة تقوم بتشغيل الوظيفة المحددة بالتوازي مع البرنامج الرئيسي.
الإجراء – التحكم في العمليات الجارية.
stop– إيقاف مؤشر الترابط يدويًا، وهو أمر مفيد لإيقاف السلوك في الخلفية.
المُنشئ#
Thread#
يقوم الأمر Thread بإنشاء وتشغيل سلسلة عمليات. عند إنشاء سلسلة عمليات، يمكنك تسميتها لإيقافها عندما لا تعود هناك حاجة إليها.
طريقة الاستخدام:
my_thread = Thread(my_function)
حدود |
وصف |
|---|---|
|
اختياري. اسم للموضوع الجديد. |
|
The name of a previously defined function. |
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)
فعل#
stop#
يُستخدم الأمر stop الترابط يدويًا، وهو أمر مفيد عندما لا تعود هناك حاجة لمهمة ما أو عندما يحتاج البرنامج إلى إعادة ضبط مؤشرات الترابط. بمجرد إيقاف مؤشر الترابط، لا يمكن إعادة تشغيله. لتشغيله مرة أخرى، يجب إنشاء مؤشر ترابط جديد باستخدام Thread.
طريقة الاستخدام:
my_thread.stop()
حدود |
وصف |
|---|---|
|
كائن سلسلة عمليات تم تشغيلها مسبقًا. هذا هو الاسم الذي تم تعيينه عند إنشاء سلسلة العمليات باستخدام |
"""
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()