Imeachtaí#

Réamhrá#

Ligeann imeachtaí duit feidhm a thosú go neamhshioncrónach. Nuair a chraoltar imeacht, cuirtear tús le feidhm athghlaoite an imeachta ina thasc (snáithe) féin, ionas gur féidir le do phríomhchód leanúint ar aghaidh ag rith ag an am céanna.

Tábhachtach: Stórálann réad event glao siar amháin. Má chláraíonn tú feidhm eile leis an réad imeachta céanna, cuireann sé ionad an ghlao siar roimhe sin.

Más mian leat go dtarlódh roinnt rudaí ó spreagadh amháin, déan ceann amháin díobh seo:

  • Glaoigh ar ilfheidhmeanna cúnta ó ghlao ar ais amháin, nó

  • Bain úsáid as ilréada imeachta agus craol gach ceann acu.

  • Bain úsáid as snáitheanna ar leithligh chun tascanna a rith go neamhspleách.

Chun Imeacht a chruthú agus a úsáid ansin, lean na céimeanna seo san ord ceart:

  1. Cruthaigh an t-imeacht le event.

  2. Socraigh glao ar ais an imeachta ag baint úsáide as ainm an imeachta (m.sh.: myEvent(myCallback);).

  3. Broadcast an event:

    • broadcast — Spreagann sé seo gach feidhm chláraithe i réad imeachta chun rith go comhthreomhar.

    • broadcastAndWait — Cuireann sé seo gach feidhm chláraithe i réad imeachta i ngníomh agus fanann sé go mbeidh siad críochnaithe sula leanann sé ar aghaidh.

Tógálaithe Ranga#

1 — Cruthaíonn sé réad event gan feidhm athghlaoite.

event();

2 — Cruthaíonn sé réad event le feidhm ghlao ar ais.

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

3 — Cruthaíonn sé réad event ó imeacht eile le feidhm ghlao ar ais.

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

4 — Cruthaíonn sé réad event le feidhm ghlao ar ais a ghlacann le hargóint.

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

5 — Cruthaíonn sé réad event ó imeacht eile le feidhm ghlaoigh ar ais a ghlacann le hargóint.

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

Scriostóir Ranga#

Scriosann sé an réad event agus scaoileann sé acmhainní gaolmhara.

~event();

Paraiméadair#

Paraiméadar

Cineál

Cur síos

callback

void (*)(void)

Feidhm atá sainmhínithe roimh ré le forghníomhú nuair a chraoltar an ócáid.

v

event

Réad imeachta atá ann cheana le cóipeáil uaidh.

callback

void (*)(void *)

Feidhm a ghlacann le hargóint pointeora folamh agus a fhorghníomhaítear nuair a chraoltar an imeacht.

arg

void *

Pointeoir chuig sonraí a chuirfear chuig an fheidhm athghlaoite.

Nótaí#

  • Stórálann réad event glao siar amháin. Má chláraíonn tú feidhm eile leis an réad imeachta céanna, cuireann sé ionad an ghlao siar roimhe sin.

  • Más mian leat go dtarlódh roinnt rudaí ó spreagadh amháin, déan ceann amháin díobh seo:

    • Glaoigh ar ilfheidhmeanna cúnta ó ghlao ar ais amháin, nó

    • Bain úsáid as ilréada imeachta agus craol gach ceann acu.

    • Bain úsáid as snáitheanna ar leithligh chun tascanna a rith go neamhspleách.

Sampla#

Sainmhínigh an fheidhm athghlaoite (lasmuigh de int main())

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

Cláraigh an glao ar ais taobh istigh de int main()

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

Feidhmeanna na mBall#

Áirítear leis an rang event na feidhmeanna ball seo a leanas:

  • operator — Socraíonn sé feidhm athghlaoite don imeacht.

  • broadcast — Spreagann sé feidhm athghlaoite an imeachta chun rith go comhthreomhar.

  • broadcastAndWait — Cuireann sé feidhm athghlaoite an imeachta i ngníomh agus fanann sé go mbeidh sé críochnaithe.

Sula nglaotar ar aon fheidhmeanna event ball, ní mór sampla event a chruthú, mar a thaispeántar thíos:

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

Socraíonn sé feidhm athghlaoite don imeacht ag baint úsáide as an oibreoir glao feidhme.

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

Parameters

Paraiméadar

Cineál

Cur síos

callback

void (*)(void)

Feidhm athghlaoite atá sainithe roimhe seo a ghlaoitear go huathoibríoch nuair a chraoltar an ócáid. Ní mór don fheidhm a bheith ag teacht leis an síniú athghlaoite riachtanach. Féach Feidhmeanna Athghlaoite le haghaidh tuilleadh eolais.

Return Values

Ní thugann an fheidhm seo luach ar ais.

Notes
  • Cuireann athghlao athuair ionad an ghlao athuair roimhe seo.

  • Ní mór gan aon pharaiméadair a bheith ag an fheidhm athghlaoite agus folamh a thabhairt ar ais.

Examples

Sainmhínigh na feidhmeanna athghlaoite (lasmuigh de 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);
}

Cláraigh an glao ar ais taobh istigh de int main()

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 tosaíonn glao ar ais an imeachta agus leanann sé ar aghaidh láithreach.

Member Functions
void broadcast();

Parameters

Ní ghlacann an fheidhm seo aon pharaiméadair.

Return Values

Ní thugann an fheidhm seo luach ar ais.

Examples

Sainmhínigh an fheidhm athghlaoite (lasmuigh de int main())

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

Cláraigh an glao ar ais taobh istigh de int main()

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#

Tosaíonn sé an glao ar ais agus fanann sé go dtí go mbeidh sé críochnaithe (nó go n-imíonn an t-am amach).

Available Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

Paraiméadar

Cineál

Cur síos

timeout

int32_t

An méid milleasoicind le fanacht sula dtosaíonn an cód ag feidhmiú arís (réamhshocraithe go 60000).

Return Values

Ní thugann an fheidhm seo luach ar ais.

Notes
  • Ná húsáid é seo ach le glaonna siar a chríochnaíonn (gan lúba gan teorainn).

  • Is feidhm feithimh í seo a chuireann bac ar fhorghníomhú go dtí go gcríochnófar an glao ar ais nó go dtéann an t-am thart.

Examples

Sainmhínigh an fheidhm athghlaoite (lasmuigh de int main())

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

Cláraigh an glao ar ais taobh istigh de int main()

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