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#

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

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

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