Εκδηλώσεις#
Εισαγωγή#
Τα συμβάντα σάς επιτρέπουν να ξεκινάτε μια συνάρτηση ασύγχρονα. Όταν μεταδίδεται ένα συμβάν, η συνάρτηση επανάκλησης του συμβάντος ξεκινά στη δική της εργασία (νήμα), επομένως ο κύριος κώδικά σας μπορεί να συνεχίσει να εκτελείται ταυτόχρονα.
Important: An event object stores one callback. If you register another function with the same event object, it replaces the previous callback.
Αν θέλετε να συμβούν πολλά πράγματα από μία ενεργοποίηση, είτε:
Κλήση πολλαπλών βοηθητικών συναρτήσεων από μία μόνο επανάκληση ή
Χρησιμοποιήστε πολλά αντικείμενα συμβάντος και μεταδώστε το καθένα.
Χρησιμοποιήστε ξεχωριστά threads για να εκτελέσετε εργασίες ανεξάρτητα.
Για να δημιουργήσετε και στη συνέχεια να χρησιμοποιήσετε ένα Συμβάν, ακολουθήστε τα παρακάτω βήματα με τη σειρά:
Create the event with
event.Set the event’s callback using the event name (ex:
myEvent(myCallback);).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
eventobject without a callback function.event();
2 — Creates an
eventobject with a callback function.event( void (* callback)(void) );
3 — Creates an
eventobject from another event with a callback function.event( event v, void (* callback)(void) );
4 — Creates an
eventobject with a callback function that accepts an argument.event( void (* callback)(void *), void *arg );
5 — Creates an
eventobject 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();
Παράμετροι#
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Μια συνάρτηση που έχει οριστεί εκ των προτέρων για εκτέλεση κατά τη μετάδοση του συμβάντος. |
|
|
Ένα υπάρχον αντικείμενο συμβάντος από το οποίο θα αντιγραφεί. |
|
|
Μια συνάρτηση που δέχεται ένα όρισμα δείκτη void και εκτελείται όταν μεταδίδεται το συμβάν. |
|
|
Ένας δείκτης προς δεδομένα που θα διαβιβαστούν στη συνάρτηση επανάκλησης. |
Σημειώσεις#
An
eventobject 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!");
}
int main() {
// Create an event called myEvent and 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 Functionsvoid operator()( void (* callback)() );
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Μια προηγουμένως καθορισμένη συνάρτηση επανάκλησης που καλείται αυτόματα κατά την μετάδοση του συμβάντος. Η συνάρτηση πρέπει να ταιριάζει με την απαιτούμενη υπογραφή επανάκλησης. Ανατρέξτε στην ενότητα Συναρτήσεις επανάκλησης για περισσότερες πληροφορίες. |
Αυτή η συνάρτηση δεν επιστρέφει τιμή.
NotesΗ εκ νέου ρύθμιση μιας επανάκλησης αντικαθιστά την προηγούμενη επανάκληση.
Η συνάρτηση επανάκλησης δεν πρέπει να έχει παραμέτρους και να επιστρέφει void.
void drawSquare() {
Brain.Screen.clearScreen();
Brain.Screen.drawRectangle(40, 40, 120, 120);
}
void drawCircle() {
Brain.Screen.clearScreen();
Brain.Screen.drawCircle(100, 100, 60);
}
int main() {
// 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.
void broadcast();
Αυτή η συνάρτηση δεν δέχεται καμία παράμετρο.
Return ValuesΑυτή η συνάρτηση δεν επιστρέφει τιμή.
Examples// Create a callback function.
void onMyEvent() {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Event fired!");
}
int main() {
Brain.Screen.print("Broadcasting in 2 seconds...");
// Create an event called myEvent and set onMyEvent
// as the callback function.
event myEvent(onMyEvent);
wait(2, seconds);
// Trigger the event.
myEvent.broadcast();
}
broadcastAndWait#
Ξεκινά την επανάκληση και περιμένει μέχρι να ολοκληρωθεί (ή να λήξει το χρονικό όριο).
Available Functionsvoid broadcastAndWait( int32_t timeout = 60000 );
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Ο αριθμός των χιλιοστών του δευτερολέπτου που θα περιμένουν πριν ξεκινήσει ξανά η εκτέλεση του κώδικα (προεπιλογή 60000). |
Αυτή η συνάρτηση δεν επιστρέφει τιμή.
NotesΧρησιμοποιήστε αυτό μόνο με επανακλήσεις που τελειώνουν (όχι άπειροι βρόχοι).
Αυτή είναι μια συνάρτηση αναμονής που μπλοκάρει την εκτέλεση μέχρι να ολοκληρωθεί ή να λήξει το χρονικό όριο της επανάκλησης.
void startDriving() {
Drivetrain.drive(forward);
wait(2, seconds);
}
int main() {
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!");
}