Renginiai#

Įvadas#

Įvykiai leidžia paleisti funkciją asinchroniškai. Kai įvykis transliuojamas, įvykio atgalinio iškvietimo funkcija paleidžiama atskiroje užduotyje (gijoje), todėl pagrindinis kodas gali toliau veikti tuo pačiu metu.

Svarbu: event objektas saugo vieną grįžtamąjį iškvietimą. Jei užregistruosite kitą funkciją su tuo pačiu įvykio objektu, ji pakeis ankstesnį grįžtamąjį iškvietimą.

Jei norite, kad iš vieno trigerio įvyktų keli dalykai, atlikite vieną iš šių veiksmų:

  • Iškviesti kelias pagalbines funkcijas iš vieno atgalinio iškvietimo arba

  • Naudokite kelis įvykių objektus ir transliuokite kiekvieną iš jų.

  • Norėdami vykdyti užduotis nepriklausomai, naudokite atskirus threads.

Norėdami sukurti ir naudoti įvykį, atlikite šiuos veiksmus tokia tvarka:

  1. Sukurkite įvykį naudodami event.

  2. Nustatykite įvykio atgalinį iškvietimą naudodami įvykio pavadinimą (pvz.: myEvent(myCallback);).

  3. Broadcast an event:

    • broadcast — Suaktyvina visas įvykio objekte užregistruotas funkcijas, kad jos veiktų lygiagrečiai.

    • broadcastAndWait – Suaktyvina visas užregistruotas įvykio objekto funkcijas ir palaukia, kol jos bus baigtos, prieš tęsiant.

Klasės konstruktoriai#

1 — Sukuria event objektą be grįžtamosios iškvietimo funkcijos.

event();

2 — Sukuria event objektą su grįžtamosios iškvietimo funkcija.

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

3 — Sukuria event objektą iš kito įvykio su grįžtamosios iškvietimo funkcija.

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

4 — Sukuria event objektą su grįžtamosios iškvietimo funkcija, kuri priima argumentą.

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

5 — Sukuria event objektą iš kito įvykio su grįžtamosios iškvietimo funkcija, kuri priima argumentą.

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

Klasės destruktorius#

Sunaikina event objektą ir išlaisvina susijusius išteklius.

~event();

Parametrai#

Parametras

Tipas

Aprašymas

callback

void (*)(void)

Funkcija, kuri anksčiau buvo apibrėžta vykdyti, kai įvykis transliuojamas.

v

event

Esamas įvykio objektas, iš kurio galima kopijuoti.

callback

void (*)(void *)

Funkcija, kuri priima tuščio rodyklės argumentą ir vykdoma, kai įvykis transliuojamas.

arg

void *

Rodyklė į duomenis, kurie bus perduoti atgalinio iškvietimo funkcijai.

Pastabos#

  • event objektas saugo vieną grįžtamąjį iškvietimą. Jei užregistruosite kitą funkciją su tuo pačiu įvykio objektu, ji pakeis ankstesnį grįžtamąjį iškvietimą.

  • Jei norite, kad iš vieno trigerio įvyktų keli dalykai, atlikite vieną iš šių veiksmų:

    • Iškviesti kelias pagalbines funkcijas iš vieno atgalinio iškvietimo arba

    • Naudokite kelis įvykių objektus ir transliuokite kiekvieną iš jų.

    • Naudokite atskiras gijas, kad užduotys būtų vykdomos nepriklausomai.

Pavyzdys#

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

Narių funkcijos#

event klasė apima šias narines funkcijas:

  • operator — Nustato įvykio atgalinio iškvietimo funkciją.

  • broadcast — Suaktyvina įvykio atgalinio iškvietimo funkciją, kad ji veiktų lygiagrečiai.

  • broadcastAndWait — Suaktyvina įvykio atgalinio iškvietimo funkciją ir laukia, kol bus baigta.

Prieš iškviečiant bet kokias event narių funkcijas, reikia sukurti event egzempliorių, kaip parodyta žemiau:

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

Nustato įvykio atgalinio iškvietimo funkciją naudodamas funkcijos iškvietimo operatorių.

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

Parameters

Parametras

Tipas

Aprašymas

callback

void (*)(void)

Anksčiau apibrėžta atgalinio iškvietimo funkcija, kuri iškviečiama automatiškai, kai įvykis transliuojamas. Funkcija turi atitikti reikiamą atgalinio iškvietimo parašą. Daugiau informacijos žr. Atgalinio iškvietimo funkcijos.

Return Values

Ši funkcija negrąžina reikšmės.

Notes
  • Nustačius atgalinį iškvietimą dar kartą, ankstesnis atgalinis iškvietimas pakeičiamas.

  • Atgalinio iškvietimo funkcija negali turėti parametrų ir grąžinti 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 pradeda įvykio atgalinį iškvietimą ir iš karto tęsia.

Member Functions
void broadcast();

Parameters

Ši funkcija nepriima jokių parametrų.

Return Values

Ši funkcija negrąžina reikšmės.

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#

Pradeda grįžtamąjį ryšį ir laukia, kol jis baigsis (arba pasibaigs skirtasis laikas).

Available Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

Parametras

Tipas

Aprašymas

timeout

int32_t

Milisekundžių skaičius, kurį reikia palaukti, kol kodas vėl bus pradėtas vykdyti (numatytoji reikšmė yra 60000).

Return Values

Ši funkcija negrąžina reikšmės.

Notes
  • Naudokite tai tik su grįžtamaisiais iškvietimais, kurie baigiasi (be begalinių ciklų).

  • Tai laukimo funkcija, kuri blokuoja vykdymą, kol grįžtamasis iškvietimas bus baigtas arba pasibaigs skirtasis laikas.

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