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