Konular#

giriiş#

İş parçacıkları, bir robotun aynı program içinde birden fazla görevi eş zamanlı olarak çalıştırmasına olanak tanır. Çoklu görev yürütmeyi mümkün kılarak robotun aynı anda bağımsız eylemler gerçekleştirmesini sağlarlar.

Not: Bunu bir iş parçacığıyla kullanmak için önce bir fonksiyon tanımlamanız gerekir.

Yapıcı fonksiyon – Yeni iş parçacıkları oluşturur ve başlatır.

  • Thread – Belirtilen işlevi ana programla paralel olarak çalıştıran yeni bir iş parçacığı başlatır.

Eylem – Çalışan iş parçacıklarını kontrol et.

  • stop – Bir iş parçacığını manuel olarak durdurur, arka plan davranışını durdurmak için kullanışlıdır.

Yapıcı#

Thread#

Thread bir iş parçacığı oluşturur ve başlatır. Bir iş parçacığı oluşturduğunuzda, artık ihtiyaç duyulmadığında durdurmak için ona bir isim verebilirsiniz.

Kullanım:

my_thread = Thread(my_function)

Parametreler

Tanım

my_thread

İsteğe bağlı. Yeni iş parçacığı için bir isim.

my_function

Daha önce tanımlanmış bir fonksiyonun adı.

Not: Bir fonksiyon, çağrılmadan her zaman önce tanımlanmalıdır.

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)

Aksiyon#

stop#

stop , bir iş parçacığını manuel olarak durdurur; bu, bir göreve artık ihtiyaç duyulmadığında veya bir programın iş parçacıklarını sıfırlaması gerektiğinde kullanışlıdır. Bir iş parçacığı durdurulduktan sonra yeniden başlatılamaz. Tekrar çalıştırmak için Thread kullanarak yeni bir iş parçacığı oluşturmalısınız.

Kullanım:

my_thread.stop()

Parametreler

Tanım

my_thread

Daha önce başlatılmış bir iş parçacığı nesnesi. Bu, iş parçacığı Thread kullanılarak oluşturulduğunda atanan addır.

"""
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()