Εκδηλώσεις#
Εισαγωγή#
Τα συμβάντα σάς επιτρέπουν να ξεκινάτε μια συνάρτηση ασύγχρονα. Όταν μεταδίδεται ένα συμβάν, η συνάρτηση επανάκλησης του συμβάντος ξεκινά στη δική της εργασία (νήμα), επομένως ο κύριος κώδικά σας μπορεί να συνεχίσει να εκτελείται ταυτόχρονα.
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.Αν θέλετε να συμβούν πολλά πράγματα από μία ενεργοποίηση, είτε:
Κλήση πολλαπλών βοηθητικών συναρτήσεων από μία μόνο επανάκληση ή
Χρησιμοποιήστε πολλά αντικείμενα συμβάντος και μεταδώστε το καθένα.
Χρησιμοποιήστε ξεχωριστά νήματα για να εκτελέσετε εργασίες ανεξάρτητα.
Παράδειγμα#
Define the callback function (outside of
int main())// Create a callback function void onMyEvent() { Brain.Screen.print("Callback function executed!"); }Register the callback inside
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // 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 Functionsvoid operator()( void (* callback)() );
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Μια προηγουμένως καθορισμένη συνάρτηση επανάκλησης που καλείται αυτόματα κατά την μετάδοση του συμβάντος. Η συνάρτηση πρέπει να ταιριάζει με την απαιτούμενη υπογραφή επανάκλησης. Ανατρέξτε στην ενότητα Συναρτήσεις επανάκλησης για περισσότερες πληροφορίες. |
Αυτή η συνάρτηση δεν επιστρέφει τιμή.
NotesΗ εκ νέου ρύθμιση μιας επανάκλησης αντικαθιστά την προηγούμενη επανάκληση.
Η συνάρτηση επανάκλησης δεν πρέπει να έχει παραμέτρους και να επιστρέφει void.
Define the callback functions (outside of
int main())// Create a callback function void drawSquare() { Brain.Screen.clearScreen(); Brain.Screen.drawRectangle(40, 40, 120, 120); }void drawCircle() { Brain.Screen.clearScreen(); Brain.Screen.drawCircle(100, 100, 60); }Register the callback inside
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // 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Αυτή η συνάρτηση δεν επιστρέφει τιμή.
ExamplesDefine the callback function (outside of
int main())// Create a callback function void onMyEvent() { Brain.Screen.clearScreen(); Brain.Screen.setCursor(1, 1); Brain.Screen.print("Event fired!"); }Register the callback inside
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); 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 Functionsvoid broadcastAndWait( int32_t timeout = 60000 );
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Ο αριθμός των χιλιοστών του δευτερολέπτου που θα περιμένουν πριν ξεκινήσει ξανά η εκτέλεση του κώδικα (προεπιλογή 60000). |
Αυτή η συνάρτηση δεν επιστρέφει τιμή.
NotesΧρησιμοποιήστε αυτό μόνο με επανακλήσεις που τελειώνουν (όχι άπειροι βρόχοι).
Αυτή είναι μια συνάρτηση αναμονής που μπλοκάρει την εκτέλεση μέχρι να ολοκληρωθεί ή να λήξει το χρονικό όριο της επανάκλησης.
Define the callback function (outside of
int main())// Create a callback function void startDriving() { Drivetrain.drive(forward); wait(2, seconds); }Register the callback inside
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); 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!"); }