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#

Definējiet atzvanīšanas funkciju (ārpus int main())

// Create a callback function
void onMyEvent() {
  Brain.Screen.print("Callback function executed!");
}

Reģistrējiet atzvanīšanas funkciju int main() iekšpusē

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Create an event called myEvent
  // 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

Definējiet atzvanīšanas funkcijas (ārpus int main())

// Create a callback function
void drawSquare() {
  Brain.Screen.clearScreen();
  Brain.Screen.drawRectangle(40, 40, 120, 120);
}

void drawCircle() {
  Brain.Screen.clearScreen();
  Brain.Screen.drawCircle(100, 100, 60);
}

Reģistrējiet atzvanīšanas funkciju int main() iekšpusē

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

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

Definējiet atzvanīšanas funkciju (ārpus int main())

// Create a callback function
void onMyEvent() {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Event fired!");
}

Reģistrējiet atzvanīšanas funkciju int main() iekšpusē

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  Brain.Screen.print("Broadcasting in 2 seconds...");

  // Create an event called myEvent
  // 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

Definējiet atzvanīšanas funkciju (ārpus int main())

// Create a callback function
void startDriving() {
  Drivetrain.drive(forward);
  wait(2, seconds);
}

Reģistrējiet atzvanīšanas funkciju int main() iekšpusē

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

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