Evenementen#

Invoering#

Met behulp van events kun je een functie asynchroon starten. Wanneer een event wordt uitgezonden, wordt de callback-functie van het event in een eigen taak (thread) gestart, zodat je hoofdcode tegelijkertijd kan blijven draaien.

Belangrijk: Een event-object met event waarden slaat één callbackfunctie op. Als u een andere functie registreert met hetzelfde event-object, vervangt deze de vorige callbackfunctie.

Als je wilt dat er meerdere dingen gebeuren als gevolg van één trigger, dan kun je het volgende doen:

  • Roep meerdere hulpfuncties aan vanuit één callback, of

  • Gebruik meerdere gebeurtenisobjecten en zend ze allemaal uit.

  • Gebruik aparte threads om taken onafhankelijk van elkaar uit te voeren.

Om een ​​evenement aan te maken en te gebruiken, volg je deze stappen in de juiste volgorde:

  1. Maak het evenement aan met event.

  2. Stel de callback van de gebeurtenis in met behulp van de gebeurtenisnaam (bijv.: myEvent(myCallback);).

  3. Broadcast an event:

    • broadcast — Activeert alle geregistreerde functies in een gebeurtenisobject om parallel te worden uitgevoerd.

    • broadcastAndWait — Activeert alle geregistreerde functies in een gebeurtenisobject en wacht tot ze klaar zijn voordat verder wordt gegaan.

Klasseconstructors#

1 — Maakt een event object aan zonder callback-functie.

event();

2 — Maakt een event object aan met een callbackfunctie.

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

3 — Maakt een event object aan op basis van een ander event met een callback-functie.

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

4 — Maakt een event object aan met een callbackfunctie die een argument accepteert.

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

5 — Maakt een event object aan op basis van een ander event met een callbackfunctie die een argument accepteert.

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

Klasse-destructor#

Vernietigt het event object en geeft de bijbehorende resources vrij.

~event();

Parameters#

Parameter

Type

Beschrijving

callback

void (*)(void)

Een functie die vooraf is gedefinieerd en die wordt uitgevoerd wanneer de gebeurtenis wordt uitgezonden.

v

event

Een bestaand gebeurtenisobject om van te kopiëren.

callback

void (*)(void *)

Een functie die een void-pointerargument accepteert en wordt uitgevoerd wanneer de gebeurtenis wordt uitgezonden.

arg

void *

Een verwijzing naar de gegevens die aan de callbackfunctie worden doorgegeven.

Notities#

  • Een event-object met event waarden slaat één callbackfunctie op. Als je een andere functie registreert met hetzelfde event-object, vervangt deze de vorige callbackfunctie.

  • Als je wilt dat er meerdere dingen gebeuren als gevolg van één trigger, dan kun je het volgende doen:

    • Roep meerdere hulpfuncties aan vanuit één callback, of

    • Gebruik meerdere gebeurtenisobjecten en zend ze allemaal uit.

    • Gebruik aparte threads om taken onafhankelijk van elkaar uit te voeren.

Voorbeeld#

// 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);
}

Lidfuncties#

De klasse event bevat de volgende lidfuncties:

  • operator — Stelt een callbackfunctie in voor de gebeurtenis.

  • broadcast — Activeert de callbackfunctie van de gebeurtenis om parallel te worden uitgevoerd.

  • broadcastAndWait — Activeert de callbackfunctie van de gebeurtenis en wacht op voltooiing.

Voordat er lidfuncties van gebeurtenis event kunnen worden aangeroepen, moet er een instantie van gebeurtenis event worden aangemaakt, zoals hieronder wordt weergegeven:

/* 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#

Stelt een callbackfunctie in voor de gebeurtenis met behulp van de functieaanroepoperator.

Available Functions
void operator()( void (* callback)() );

Parameters

Parameter

Type

Beschrijving

callback

void (*)(void)

Een eerder gedefinieerde callbackfunctie die automatisch wordt aangeroepen wanneer de gebeurtenis wordt uitgezonden. De functie moet overeenkomen met de vereiste callbacksignatuur. Zie Callbackfuncties voor meer informatie.

Return Values

Deze functie retourneert geen waarde.

Notes
  • Het opnieuw instellen van een callback vervangt de vorige callback.

  • De callbackfunctie mag geen parameters hebben en moet void retourneren.

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 start de callback van het evenement en gaat direct verder.

Member Functions
void broadcast();

Parameters

Deze functie accepteert geen parameters.

Return Values

Deze functie retourneert geen waarde.

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#

Start de callback en wacht tot deze is voltooid (of tot de time-out is bereikt).

Available Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

Parameter

Type

Beschrijving

timeout

int32_t

Het aantal milliseconden dat gewacht moet worden voordat de code opnieuw wordt uitgevoerd (standaardwaarde: 60000).

Return Values

Deze functie retourneert geen waarde.

Notes
  • Gebruik dit alleen met callbacks die eindigen (geen oneindige lussen).

  • Dit is een wachtfunctie die de uitvoering blokkeert totdat de callback is voltooid of de time-out is bereikt.

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