Sự kiện#

Giới thiệu#

Sự kiện cho phép bạn chạy các chức năng song song bằng cách sử dụng các đối tượng sự kiện. Thay vì gọi các chức năng hoặc luồng lần lượt, sự kiện cho phép bạn đăng ký các chức năng và sau đó kích hoạt tất cả chúng cùng một lúc. Mỗi chức năng đã đăng ký sẽ chạy trong luồng riêng của nó, vì vậy robot của bạn có thể thực hiện nhiều việc cùng một lúc — chẳng hạn như nhấp nháy đèn LED cảm ứng và di chuyển.

Dưới đây là danh sách các phương thức và hàm tạo có sẵn:

  • Event – Tạo một đối tượng sự kiện mới.

  • broadcast – Kích hoạt tất cả các chức năng đã đăng ký trong một đối tượng sự kiện để chạy song song.

  • broadcast_and_wait – Kích hoạt tất cả các hàm đã đăng ký trong một đối tượng sự kiện và chờ chúng hoàn thành trước khi tiếp tục.

  • event – Đăng ký một hàm vào đối tượng sự kiện, tùy chọn với các đối số.

Create an Event Object#

Sự kiện Event tạo ra một đối tượng sự kiện quản lý việc thực thi hàm trong các luồng riêng biệt.

Usage:
Event()

Tham số

Sự miêu tả

Hàm tạo này không có tham số.

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#

Lệnh broadcast kích hoạt một sự kiện, khởi chạy tất cả các hàm đã đăng ký trong các luồng riêng biệt. Phương thức này không tạm dừng việc thực thi bất kỳ hàm nào tiếp theo.

Usage:
my_event.broadcast()

Tham số

Sự miêu tả

event

Tên của đối tượng sự kiện đã được tạo trước đó.

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 bắt đầu một sự kiện nhưng chờ tất cả các hàm đã đăng ký hoàn thành trước khi tiếp tục với các hàm tiếp theo.

Usage:
my_event.broadcast_and_wait()

Tham số

Sự miêu tả

event

Tên của đối tượng sự kiện đã được tạo trước đó.

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#

Khi bạn đăng ký một hàm cho một sự kiện, hàm đó sẽ được thực thi trong một luồng riêng biệt khi sự kiện được phát đi.

Usage:
event(callback, args)

Tham số

Sự miêu tả

event

Tên của đối tượng sự kiện đã được tạo trước đó.

callback

Một hàm đã được định nghĩa trước đó để thực thi khi sự kiện được phát đi.

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)