Olaylar#
giriiş#
Olaylar, olay nesnelerini kullanarak fonksiyonları paralel olarak çalıştırmanıza olanak tanır. Fonksiyonları veya iş parçacıklarını art arda çağırmak yerine, olaylar fonksiyonları kaydetmenize ve ardından hepsini aynı anda tetiklemenize olanak tanır. Kaydedilen her fonksiyon kendi iş parçacığında çalışır, böylece robotunuz aynı anda birden fazla şey yapabilir (örneğin, dokunmatik LED’leri yakıp söndürmek ve sürüş yapmak gibi).
Aşağıda mevcut metotlar ve yapıcı fonksiyonların listesi bulunmaktadır:
Event– Yeni bir olay nesnesi oluşturur.broadcast– Bir olay nesnesinde kayıtlı tüm işlevlerin paralel olarak çalışmasını tetikler.broadcast_and_wait– Bir olay nesnesinde kayıtlı tüm işlevleri tetikler ve devam etmeden önce bunların bitmesini bekler.event– İsteğe bağlı olarak argümanlarla birlikte bir fonksiyonu olay nesnesine kaydeder.
Create an Event Object#
Event ayrı iş parçacıklarında fonksiyon yürütmeyi yöneten bir olay nesnesi oluşturur.
Usage:
Event()
Parametre |
Tanım |
|---|---|
Bu yapıcı fonksiyonun parametresi yoktur. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set the event
move_event = Event()
move_event(dash_lines)
# Draw the dash line while driving forward
move_event.broadcast()
drivetrain.drive_for(FORWARD, 1000, MM)
# VR threads — Do not delete
vr_thread(main)
Broadcast#
broadcast , bir olayı tetikler ve kayıtlı tüm işlevleri ayrı iş parçacıklarında başlatır. Bu yöntem, sonraki işlevlerin yürütülmesini duraklatmaz.
Usage:
my_event.broadcast()
Parametre |
Tanım |
|---|---|
|
Daha önce oluşturulan etkinlik nesnesinin adı. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set the event
move_event = Event()
move_event(dash_lines)
# Draw the dash line while driving forward
move_event.broadcast()
drivetrain.drive_for(FORWARD, 1000, MM)
# VR threads — Do not delete
vr_thread(main)
Broadcast and wait#
broadcast_and_wait bir olayı başlatır ancak sonraki işlevlere devam etmeden önce kayıtlı tüm işlevlerin bitmesini bekler.
Usage:
my_event.broadcast_and_wait()
Parametre |
Tanım |
|---|---|
|
Daha önce oluşturulan etkinlik nesnesinin adı. |
def move_and_turn():
# Drive forward and turn
drivetrain.drive_for(FORWARD, 150, MM)
drivetrain.turn_for(RIGHT, 90, DEGREES)
def main():
# Wait for the event to finish after 3 seconds
move_event = Event()
move_event(move_and_turn)
while True:
if brain.timer_time(SECONDS) > 3:
move_event.broadcast_and_wait()
break
wait(5, MSEC)
brain.print("Movement done.")
# VR threads — Do not delete
vr_thread(main)
Register Functions to an Event#
Bir fonksiyonu bir olaya kaydettiğinizde, olay yayınlandığında ayrı bir iş parçacığında çalıştırılır.
Usage:
event(callback, args)
Parametre |
Tanım |
|---|---|
|
Daha önce oluşturulan etkinlik nesnesinin adı. |
|
Olay yayınlandığında yürütülecek önceden tanımlanmış bir fonksiyon. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set and call the event and start driving
move_event = Event()
move_event(dash_lines)
move_event.broadcast()
drivetrain.drive(FORWARD)
# VR threads — Do not delete
vr_thread(main)