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ā:
Izveidojiet notikumu ar
event.Iestatīt notikuma atzvanīšanas signālu, izmantojot notikuma nosaukumu (piemēram,
myEvent(myCallback);).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
eventobjektu bez atzvanīšanas funkcijas.event();
2 — Izveido
eventobjektu ar atzvanīšanas funkciju.event( void (* callback)(void) );
3 — Izveido
eventobjektu no cita notikuma ar atzvanīšanas funkciju.event( event v, void (* callback)(void) );
4 — Izveido
eventobjektu ar atzvanīšanas funkciju, kas pieņem argumentu.event( void (* callback)(void *), void *arg );
5 — Izveido
eventobjektu 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 |
|---|---|---|
|
|
Funkcija, kas iepriekš definēta izpildei, kad notikums tiek pārraidīts. |
|
|
Esošs notikuma objekts, no kura kopēt. |
|
|
Funkcija, kas pieņem tukša rādītāja argumentu un tiek izpildīta, kad notikums tiek pārraidīts. |
|
|
Rādītājs uz datiem, kas tiks nodoti atzvanīšanas funkcijai. |
Piezīmes#
eventobjekts 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 Functionsvoid operator()( void (* callback)() );
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
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. |
Šī funkcija neatgriež vērtību.
NotesAtzvanīš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).
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.
void broadcast();
Šī funkcija nepieņem nekādus parametrus.
Return ValuesŠī funkcija neatgriež vērtību.
ExamplesDefinē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 Functionsvoid broadcastAndWait( int32_t timeout = 60000 );
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Milisekundes, kas jāgaida, pirms kods atkal sāk izpildīties (pēc noklusējuma ir 60000). |
Šī funkcija neatgriež vērtību.
NotesIzmantojiet 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.
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!"); }