活动#
介绍#
事件允许您使用事件对象并行运行函数。事件允许您注册函数,然后一次性触发所有函数,而无需依次调用。每个注册的函数都在其自己的线程中运行,因此您的机器人可以同时执行多项操作,例如 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);
范围 |
描述 |
|---|---|
|
可选。先前定义的在事件广播时执行的函数。 |
// 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);
范围 |
描述 |
|---|---|
|
先前创建的事件对象的名称。 |
|
先前定义的在事件广播时执行的函数。 |
// 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();
范围 |
描述 |
|---|---|
|
先前创建的事件对象的名称。 |
// 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();
范围 |
描述 |
|---|---|
|
先前创建的事件对象的名称。 |
// 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.");
}