Acara#

Perkenalan#

Event memungkinkan Anda menjalankan fungsi secara paralel dengan menggunakan objek event. Alih-alih memanggil fungsi atau thread satu per satu, event memungkinkan Anda mendaftarkan fungsi dan kemudian memicunya sekaligus. Setiap fungsi yang terdaftar berjalan dalam thread-nya sendiri, sehingga robot Anda dapat melakukan banyak hal—seperti menyalakan dan mematikan TouchLED dan bergerak—secara bersamaan.

Berikut adalah daftar metode dan konstruktor yang tersedia:

  • Event – Membuat objek event baru.

  • broadcast – Memicu semua fungsi terdaftar dalam objek peristiwa untuk berjalan secara paralel.

  • broadcast_and_wait – Memicu semua fungsi terdaftar dalam objek peristiwa dan menunggu hingga selesai sebelum melanjutkan.

  • event – Mendaftarkan fungsi ke objek event, opsional dengan argumen.

Create an Event Object#

Event membuat objek event yang mengelola eksekusi fungsi dalam thread terpisah.

Usage:
Event()

Parameter

Keterangan

Konstruktor ini tidak memiliki parameter.

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 memicu suatu kejadian, memulai semua fungsi yang terdaftar dalam thread terpisah. Metode ini tidak menghentikan eksekusi fungsi selanjutnya.

Usage:
my_event.broadcast()

Parameter

Keterangan

event

Nama objek event yang telah dibuat sebelumnya.

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 memulai sebuah event tetapi menunggu semua fungsi yang terdaftar selesai sebelum melanjutkan ke fungsi berikutnya.

Usage:
my_event.broadcast_and_wait()

Parameter

Keterangan

event

Nama objek event yang telah dibuat sebelumnya.

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#

Saat Anda mendaftarkan sebuah fungsi ke suatu event, fungsi tersebut akan dieksekusi dalam thread terpisah ketika event tersebut disiarkan.

Usage:
event(callback, args)

Parameter

Keterangan

event

Nama objek event yang telah dibuat sebelumnya.

callback

Fungsi yang telah didefinisikan sebelumnya untuk dieksekusi ketika peristiwa tersebut disiarkan.

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)