Tapahtumat#

Johdanto#

Tapahtumien avulla voit käynnistää funktion asynkronisesti. Kun tapahtuma lähetetään, tapahtuman takaisinkutsufunktio käynnistetään omassa tehtävässään (säikeessään), joten pääkoodisi voi jatkaa suoritusta samanaikaisesti.

Tärkeää: Tapahtuma event tallentaa yhden takaisinkutsun. Jos rekisteröit toisen funktion samalla tapahtumaobjektilla, se korvaa edellisen takaisinkutsun.

Jos haluat useiden asioiden tapahtuvan yhdestä liipaisimesta, joko:

  • Kutsu useita apufunktioita yhdestä takaisinkutsusta tai

  • Käytä useita tapahtumaobjekteja ja lähetä jokainen niistä.

  • Käytä erillisiä threads-säikeitä tehtävien suorittamiseen itsenäisesti.

Voit luoda ja käyttää tapahtumaa noudattamalla seuraavia ohjeita annetussa järjestyksessä:

  1. Luo tapahtuma käyttämällä event.

  2. Aseta tapahtuman takaisinkutsu käyttämällä tapahtuman nimeä (esim.: myEvent(myCallback);).

  3. Broadcast an event:

    • broadcast — Käynnistää kaikki tapahtumaobjektin rekisteröidyt funktiot rinnakkain.

    • broadcastAndWait — Käynnistää kaikki tapahtumaobjektin rekisteröidyt funktiot ja odottaa niiden päättymistä ennen jatkamista.

Luokanrakentajat#

1 — Luo event -objektin ilman takaisinkutsufunktiota.

event();

2 — Luo event -objektin, jossa on takaisinkutsufunktio.

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

3 — Luo event -objektin toisesta tapahtumasta callback-funktiolla.

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

4 — Luo event -objektin, jossa on argumentin hyväksyvä takaisinkutsufunktio.

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

5 — Luo event -objektin toisesta tapahtumasta, jossa on argumentin hyväksyvä takaisinkutsufunktio.

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

Luokan tuhoaja#

Tuhoaa event objektin ja vapauttaa siihen liittyvät resurssit.

~event();

Parametrit#

Parametri

Tyyppi

Kuvaus

callback

void (*)(void)

Funktio, joka on aiemmin määritelty suoritettavaksi, kun tapahtuma lähetetään.

v

event

Olemassa oleva tapahtumaobjekti, josta kopioidaan.

callback

void (*)(void *)

Funktio, joka hyväksyy tyhjän osoittimen argumentin ja suoritetaan, kun tapahtuma lähetetään.

arg

void *

Osoitin tietoihin, jotka välitetään takaisinkutsufunktiolle.

Muistiinpanoja#

  • event -objekti tallentaa yhden takaisinkutsun. Jos rekisteröit toisen funktion samalla tapahtumaobjektilla, se korvaa edellisen takaisinkutsun.

  • Jos haluat useiden asioiden tapahtuvan yhdestä liipaisimesta, joko:

    • Kutsu useita apufunktioita yhdestä takaisinkutsusta tai

    • Käytä useita tapahtumaobjekteja ja lähetä jokainen niistä.

    • Käytä erillisiä säikeitä tehtävien suorittamiseen itsenäisesti.

Esimerkki#

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

Jäsenten toiminnot#

event -luokka sisältää seuraavat jäsenfunktiot:

  • operator — Asettaa tapahtumalle takaisinkutsufunktion.

  • broadcast — Käynnistää tapahtuman takaisinkutsufunktion rinnakkain.

  • broadcastAndWait — Käynnistää tapahtuman takaisinkutsufunktion ja odottaa valmistumista.

Ennen minkään event -jäsenfunktion kutsumista on luotava event -instanssi alla olevan mukaisesti:

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

Asettaa tapahtumalle takaisinkutsufunktion käyttämällä funktion kutsuoperaattoria.

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

Parameters

Parametri

Tyyppi

Kuvaus

callback

void (*)(void)

Aiemmin määritelty takaisinkutsufunktio, jota kutsutaan automaattisesti tapahtuman lähetyksen yhteydessä. Funktion on vastattava vaadittua takaisinkutsuallekirjoitusta. Lisätietoja on kohdassa Callback Functions.

Return Values

Tämä funktio ei palauta arvoa.

Notes
  • Takaisinsoiton asettaminen uudelleen korvaa edellisen takaisinsoiton.

  • Takaisinkutsufunktiolla ei saa olla parametreja, ja sen tulee palauttaa tyhjä arvo.

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 aloittaa tapahtuman takaisinkutsutoiminnon ja jatkuu välittömästi.

Member Functions
void broadcast();

Parameters

Tämä funktio ei ota vastaan ​​parametreja.

Return Values

Tämä funktio ei palauta arvoa.

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#

Aloittaa takaisinsoiton ja odottaa sen päättymistä (tai aikakatkaisua).

Available Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

Parametri

Tyyppi

Kuvaus

timeout

int32_t

Millisekuntien määrä, joka odotetaan ennen koodin suorittamisen jatkamista (oletusarvo on 60000).

Return Values

Tämä funktio ei palauta arvoa.

Notes
  • Käytä tätä vain päättyvien takaisinkutsujen kanssa (ei loputtomiin silmukoihin).

  • Tämä on odotusfunktio, joka estää suorituksen, kunnes takaisinkutsu on valmis tai aikakatkaistu.

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