活动#

介绍#

事件允许你异步启动函数。当一个事件被广播时,该事件的回调函数会在它自己的任务(线程)中启动,因此你的主代码可以同时继续运行。

Important: An event object stores one callback. If you register another function with the same event object, it replaces the previous callback.

如果你希望一个触发器触发多个事件,那么:

  • 从单个回调函数调用多个辅助函数,或者

  • 使用多个事件对象并分别广播它们。

  • 使用单独的线程独立运行任务。

要创建和使用事件,请按以下步骤操作:

  1. Create the event with event.

  2. Set the event’s callback using the event name (ex: myEvent(myCallback);).

  3. Broadcast an event:

    • broadcast — Triggers all registered functions in an event object to run in parallel.

    • broadcastAndWait — Triggers all registered functions in an event object and waits for them to finish before continuing.

类构造函数#

1 Creates an event object without a callback function.

event();

2 Creates an event object with a callback function.

event( void (* callback)(void) );

3 Creates an event object from another event with a callback function.

event( 
  event v, 
  void (* callback)(void) );

4 Creates an event object with a callback function that accepts an argument.

event( void (* callback)(void *), void *arg );

5 Creates an event object from another event with a callback function that accepts an argument.

event( event v, void (* callback)(void *), void *arg );

类析构函数#

Destroys the event object and releases associated resources.

~event();

参数#

范围

类型

描述

callback

void (*)(void)

预先定义好在事件广播时执行的函数。

v

event

要从中复制的现有事件对象。

callback

void (*)(void *)

接受 void 指针参数并在事件广播时执行的函数。

arg

void *

指向将要传递给回调函数的数据的指针。

笔记#

  • An event object stores one callback. If you register another function with the same event object, it replaces the previous callback.

  • 如果你希望一个触发器触发多个事件,那么:

    • 从单个回调函数调用多个辅助函数,或者

    • 使用多个事件对象并分别广播它们。

    • 使用单独的线程独立运行任务。

例子#

// Create a callback function
void onMyEvent() {
  Brain.Screen.print("Callback function executed!");
}

// Create an event called myEvent
// Set onMyEvent as the callback function
event myEvent(onMyEvent);

成员功能#

The event class includes the following member functions:

  • operator — Sets a callback function for the event.

  • broadcast — Triggers the event’s callback function to run in parallel.

  • broadcastAndWait — Triggers the event’s callback function and waits for completion.

Before calling any event member functions, an event instance must be created, as shown below:

/* This constructor is required when using VS Code.
Event configuration can be created with or without
a callback function as shown in the examples above. */

// Create an event without a callback
event myEvent;

// Or create an event with a callback
event myEvent(onMyEvent);

operator#

使用函数调用运算符为事件设置回调函数。

Available Functions
void operator()( void (* callback)() );

Parameters

范围

类型

描述

callback

void (*)(void)

预先定义的回调函数,会在事件广播时自动调用。该函数必须符合所需的回调函数签名。更多信息请参见回调函数

Return Values

此函数不返回值。

Notes
  • 再次设置回调函数会覆盖之前的回调函数。

  • 回调函数不能有参数,并且返回 void。

Examples
void drawSquare() {
  Brain.Screen.clearScreen();
  Brain.Screen.drawRectangle(40, 40, 120, 120);
}

void drawCircle() {
  Brain.Screen.clearScreen();
  Brain.Screen.drawCircle(100, 100, 60);
}

// Create the event drawEvent
event drawEvent;

Brain.Screen.print("Drawing a square...");

// Set the event to drawSquare
drawEvent(drawSquare);

wait(1, seconds);

// Trigger the event
drawEvent.broadcast();

wait(1, seconds);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Drawing a circle...");

// Replace drawSquare with drawCircle
drawEvent(drawCircle);

wait(1, seconds);

// Trigger the event a second time
drawEvent.broadcast();

broadcast#

broadcast starts the event’s callback and continues immediately.

Member Functions
void broadcast();

Parameters

此函数不接受任何参数。

Return Values

此函数不返回值。

Examples
// Create a callback function
void onMyEvent() {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Event fired!");
}

Brain.Screen.print("Broadcasting in 2 seconds...");

// Create an event called myEvent
// Set onMyEvent as the callback function
event myEvent(onMyEvent);

wait(2, seconds);

// Trigger the event
myEvent.broadcast();

broadcastAndWait#

启动回调函数并等待其完成(或超时)。

Available Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

范围

类型

描述

timeout

int32_t

代码再次开始执行之前要等待的毫秒数(默认为 60000)。

Return Values

此函数不返回值。

Notes
  • 仅用于会结束的回调函数(不要用于无限循环)。

  • 这是一个等待函数,它会阻塞执行,直到回调完成或超时。

Examples
void startDriving() {
  Drivetrain.drive(forward);
  wait(2, seconds);
}


Brain.Screen.print("Starting drive...");

event driveEvent(startDriving);
// Give the event time to be set
wait(0.25, seconds);

// Run the event and wait until it finishes
driveEvent.broadcastAndWait();

// Stop driving after 2 seconds
Drivetrain.stop();
Brain.Screen.clearScreen();
Brain.Screen.print("Drive complete!");