Εκδηλώσεις#

Εισαγωγή#

Τα συμβάντα σάς επιτρέπουν να ξεκινάτε μια συνάρτηση ασύγχρονα. Όταν μεταδίδεται ένα συμβάν, η συνάρτηση επανάκλησης του συμβάντος ξεκινά στη δική της εργασία (νήμα), επομένως ο κύριος κώδικά σας μπορεί να συνεχίσει να εκτελείται ταυτόχρονα.

Important: An event object stores one callback. If you register another function with the same event object, it replaces the previous callback.

Αν θέλετε να συμβούν πολλά πράγματα από μία ενεργοποίηση, είτε:

  • Κλήση πολλαπλών βοηθητικών συναρτήσεων από μία μόνο επανάκληση ή

  • Χρησιμοποιήστε πολλά αντικείμενα συμβάντος και μεταδώστε το καθένα.

  • Χρησιμοποιήστε ξεχωριστά threads για να εκτελέσετε εργασίες ανεξάρτητα.

Για να δημιουργήσετε και στη συνέχεια να χρησιμοποιήσετε ένα Συμβάν, ακολουθήστε τα παρακάτω βήματα με τη σειρά:

  1. Create the event with event.

  2. Set the event’s callback using the event name (ex: myEvent(myCallback);).

  3. 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 event object without a callback function.

event();

2 Creates an event object with a callback function.

event( void (* callback)(void) );

3 Creates an event object from another event with a callback function.

event( 
  event v, 
  void (* callback)(void) );

4 Creates an event object with a callback function that accepts an argument.

event( void (* callback)(void *), void *arg );

5 Creates an event object 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();

Παράμετροι#

Παράμετρος

Τύπος

Περιγραφή

callback

void (*)(void)

Μια συνάρτηση που έχει οριστεί εκ των προτέρων για εκτέλεση κατά τη μετάδοση του συμβάντος.

v

event

Ένα υπάρχον αντικείμενο συμβάντος από το οποίο θα αντιγραφεί.

callback

void (*)(void *)

Μια συνάρτηση που δέχεται ένα όρισμα δείκτη void και εκτελείται όταν μεταδίδεται το συμβάν.

arg

void *

Ένας δείκτης προς δεδομένα που θα διαβιβαστούν στη συνάρτηση επανάκλησης.

Σημειώσεις#

  • An event object 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 Functions
void operator()( void (* callback)() );

Parameters

Παράμετρος

Τύπος

Περιγραφή

callback

void (*)(void)

Μια προηγουμένως καθορισμένη συνάρτηση επανάκλησης που καλείται αυτόματα κατά την μετάδοση του συμβάντος. Η συνάρτηση πρέπει να ταιριάζει με την απαιτούμενη υπογραφή επανάκλησης. Ανατρέξτε στην ενότητα Συναρτήσεις επανάκλησης για περισσότερες πληροφορίες.

Return Values

Αυτή η συνάρτηση δεν επιστρέφει τιμή.

Notes
  • Η εκ νέου ρύθμιση μιας επανάκλησης αντικαθιστά την προηγούμενη επανάκληση.

  • Η συνάρτηση επανάκλησης δεν πρέπει να έχει παραμέτρους και να επιστρέφει void.

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

Member Functions
void broadcast();

Parameters

Αυτή η συνάρτηση δεν δέχεται καμία παράμετρο.

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 Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

Παράμετρος

Τύπος

Περιγραφή

timeout

int32_t

Ο αριθμός των χιλιοστών του δευτερολέπτου που θα περιμένουν πριν ξεκινήσει ξανά η εκτέλεση του κώδικα (προεπιλογή 60000).

Return Values

Αυτή η συνάρτηση δεν επιστρέφει τιμή.

Notes
  • Χρησιμοποιήστε αυτό μόνο με επανακλήσεις που τελειώνουν (όχι άπειροι βρόχοι).

  • Αυτή είναι μια συνάρτηση αναμονής που μπλοκάρει την εκτέλεση μέχρι να ολοκληρωθεί ή να λήξει το χρονικό όριο της επανάκλησης.

Examples
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!");
}