活动#

介绍#

事件允许您使用事件对象并行运行函数。事件允许您注册函数,然后一次性触发所有函数,而无需依次调用。每个注册的函数都在其自己的线程中运行,因此您的机器人可以同时执行多项操作,例如 LED 闪烁和驾驶。

以下是可用方法和构造函数的列表:

  • event – Creates a new event object.

  • Register Functions to an Event – Registers a function to the event object.

  • 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.

Create an Event Object#

The event constructor is used to create an event object that manages function execution in separate threads.

Usage:
event(callback);

范围

描述

callback

可选。先前定义的在事件广播时执行的函数。

// Blink the screen while moving forward
// Create moveEvent as an event object
event moveEvent = event();

void blinkScreen() {
  while (true) {
    Brain.Screen.clearScreen(red);
    wait(0.5, seconds);
    Brain.Screen.clearScreen();
    wait(0.5, seconds);
  }
}

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();
  // Begin project code
  moveEvent(blinkScreen);
  moveEvent.broadcast();
  Drivetrain.drive(forward);
}

// Blink the screen while moving forward
// Create moveEvent as an event object
void blinkScreen() {
  while (true) {
    Brain.Screen.clearScreen(red);
    wait(0.5, seconds);
    Brain.Screen.clearScreen();
    wait(0.5, seconds);
  }
}

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();
  // Begin project code
  event moveEvent = event(blinkScreen);
  moveEvent.broadcast();
  Drivetrain.drive(forward);
}

Register Functions to an Event#

当您将一个函数注册到某个事件时,它将在事件广播时在单独的线程中执行。

Usage:
eventName(callback);

范围

描述

eventName

先前创建的事件对象的名称。

callback

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

// Blink the screen while turning
event moveEvent = event();

void blinkScreen() {
  while (true) {
    Brain.Screen.clearScreen(red);
    wait(0.5, seconds);
    Brain.Screen.clearScreen();
    wait(0.5, seconds);
  }
}

void turning() {
  Drivetrain.turn(right);
}
int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();
  // Register multiple functions to the event object
  moveEvent(blinkScreen);
  moveEvent(turning);

  moveEvent.broadcast();
}

broadcast#

broadcast() triggers an event, starting all registered functions in separate threads. This method does not pause execution of any subsequent functions.

Usage:
myEvent.broadcast();

范围

描述

myEvent

先前创建的事件对象的名称。

// Blink the screen while moving forward
// Create moveEvent as an event object
event moveEvent = event();

void blinkScreen() {
  while (true) {
    Brain.Screen.clearScreen(red);
    wait(0.5, seconds);
    Brain.Screen.clearScreen();
    wait(0.5, seconds);
  }
}

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();
  // Begin project code
  moveEvent(blinkScreen);
  moveEvent.broadcast();
  Drivetrain.drive(forward);
}

broadcastAndWait#

broadcastAndWait() starts an event but waits for all registered functions to finish before continuing with subsequent functions.

Usage:
myEvent.broadcastAndWait();

范围

描述

myEvent

先前创建的事件对象的名称。

// Move after the left button is pressed
event moveEvent = event();

void moveAndTurn() {
  Drivetrain.driveFor(forward, 150, mm);
  Drivetrain.turnFor(right, 90, degrees);
}

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();
  // Begin project code
  moveEvent(moveAndTurn);
  while (true) {
    if (Brain.buttonLeft.pressing()) {
      moveEvent.broadcastAndWait();
      break;
    }
    wait(20, msec);
  }
  Brain.Screen.print("Movement done.");
}