Pasākumi#

Ievads#

Notikumi ļauj asinhroni palaist funkciju. Kad notikums tiek pārraidīts, notikuma atzvanīšanas funkcija tiek palaista atsevišķā uzdevumā (pavedienā), lai jūsu galvenais kods varētu turpināt darboties vienlaikus.

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

Ja vēlaties, lai no viena aktivizētāja notiktu vairākas lietas, veiciet vienu no šīm darbībām:

  • Izsaukt vairākas palīgfunkcijas no viena atzvanīšanas signāla vai

  • Izmantojiet vairākus notikumu objektus un pārraidiet katru no tiem.

  • Lai uzdevumus palaistu neatkarīgi, izmantojiet atsevišķus pavedienus.

Lai izveidotu un pēc tam izmantotu notikumu, veiciet tālāk norādītās darbības norādītajā secībā:

  1. Izveidojiet notikumu ar event.

  2. Iestatīt notikuma atzvanīšanas signālu, izmantojot notikuma nosaukumu (piemēram, myEvent(myCallback);).

  3. Broadcast an event:

    • broadcast — Ieslēdz visas reģistrētās funkcijas notikuma objektā, lai tās darbotos paralēli.

    • broadcastAndWait — Iedarbina visas reģistrētās funkcijas notikuma objektā un gaida, līdz tās ir pabeigtas, pirms turpināt.

Klases konstruktori#

1 — Izveido event objektu bez atzvanīšanas funkcijas.

event();

2 — Izveido event objektu ar atzvanīšanas funkciju.

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

3 — Izveido event objektu no cita notikuma ar atzvanīšanas funkciju.

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

4 — Izveido event objektu ar atzvanīšanas funkciju, kas pieņem argumentu.

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

5 — Izveido event objektu no cita notikuma ar atzvanīšanas funkciju, kas pieņem argumentu.

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

Klases iznīcinātājs#

Iznīcina event objektu un atbrīvo saistītos resursus.

~event();

Parametri#

Parametrs

Tips

Apraksts

callback

void (*)(void)

Funkcija, kas iepriekš definēta izpildei, kad notikums tiek pārraidīts.

v

event

Esošs notikuma objekts, no kura kopēt.

callback

void (*)(void *)

Funkcija, kas pieņem tukša rādītāja argumentu un tiek izpildīta, kad notikums tiek pārraidīts.

arg

void *

Rādītājs uz datiem, kas tiks nodoti atzvanīšanas funkcijai.

Piezīmes#

  • event objekts saglabā vienu atzvanīšanas pieprasījumu. Ja reģistrējat citu funkciju ar to pašu notikuma objektu, tā aizstāj iepriekšējo atzvanīšanas pieprasījumu.

  • Ja vēlaties, lai no viena aktivizētāja notiktu vairākas lietas, veiciet vienu no šīm darbībām:

    • Izsaukt vairākas palīgfunkcijas no viena atzvanīšanas signāla vai

    • Izmantojiet vairākus notikumu objektus un pārraidiet katru no tiem.

    • Izmantojiet atsevišķus pavedienus, lai uzdevumus izpildītu neatkarīgi.

Piemērs#

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

Dalībnieku funkcijas#

event klasē ir iekļautas šādas dalībfunkcijas:

  • operator — Iestata notikuma atzvanīšanas funkciju.

  • broadcast — Aktivizē notikuma atzvanīšanas funkcijas paralēlu darbību.

  • broadcastAndWait — Aktivizē notikuma atzvanīšanas funkciju un gaida pabeigšanu.

Pirms jebkuru event dalībfunkciju izsaukšanas ir jāizveido event instance, kā parādīts zemāk:

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

Iestata notikuma atzvanīšanas funkciju, izmantojot funkcijas izsaukšanas operatoru.

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

Parameters

Parametrs

Tips

Apraksts

callback

void (*)(void)

Iepriekš definēta atzvanīšanas funkcija, kas tiek izsaukta automātiski, kad notikums tiek pārraidīts. Funkcijai ir jāatbilst nepieciešamajam atzvanīšanas parakstam. Plašāku informāciju skatiet sadaļā Atzvanīšanas funkcijas.

Return Values

Šī funkcija neatgriež vērtību.

Notes
  • Atzvanīšanas iestatīšana vēlreiz aizstāj iepriekšējo atzvanīšanu.

  • Atzvanīšanas funkcijai nedrīkst būt parametru, un tai jāatgriež tukšums (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 sāk notikuma atzvanīšanu un nekavējoties turpinās.

Member Functions
void broadcast();

Parameters

Šī funkcija nepieņem nekādus parametrus.

Return Values

Šī funkcija neatgriež vērtību.

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#

Sāk atzvanu un gaida, līdz tas beidzas (vai iestājas taimauts).

Available Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

Parametrs

Tips

Apraksts

timeout

int32_t

Milisekundes, kas jāgaida, pirms kods atkal sāk izpildīties (pēc noklusējuma ir 60000).

Return Values

Šī funkcija neatgriež vērtību.

Notes
  • Izmantojiet to tikai ar atzvanīšanas darbībām, kas beidzas (nevis bezgalīgiem cikliem).

  • Šī ir gaidīšanas funkcija, kas bloķē izpildi, līdz atzvanīšana ir pabeigta vai iestājas taimauts.

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