活動#

介紹#

事件允許您使用事件物件並行運行函數。無需逐個呼叫函數或線程,事件允許您註冊函數,然後一次觸發所有函數。每個註冊的函數都在其自身的線程中運行,因此您的機器人可以同時執行多項操作,例如閃爍觸摸LED燈和行駛。

以下是可用方法和建構函式的列表:

  • Event – 建立一個新的事件物件。

  • broadcast – 觸發事件物件中所有已註冊的函數並行運行。

  • broadcast_and_wait – 觸發事件物件中所有已註冊的函數,並等待它們完成後再繼續。

  • event – 向事件物件註冊一個函數,可以帶有參數。

Create an Event Object#

Event 建立一個事件對象,該對像管理在單獨執行緒中執行的函數。

Usage:
Event()

範圍

描述

此建構函數沒有參數。

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 會觸發一個事件,並在單獨的執行緒中啟動所有已註冊的函數。此方法不會暫停任何後續函數的執行。

Usage:
my_event.broadcast()

範圍

描述

event

先前建立的事件物件的名稱。

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 啟動一個事件,但等待所有已註冊的函數完成,然後繼續執行後續函數。

Usage:
my_event.broadcast_and_wait()

範圍

描述

event

先前建立的事件物件的名稱。

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#

當您將一個函數註冊到某個事件時,當該事件被廣播時,該函數將在單獨的執行緒中執行。

Usage:
event(callback, args)

範圍

描述

event

先前建立的事件物件的名稱。

callback

預先定義的函數,將在事件廣播時執行。

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)