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:
Cruthaigh an t-imeacht le
event.Socraigh glao ar ais an imeachta ag baint úsáide as ainm an imeachta (m.sh.:
myEvent(myCallback);).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
eventgan feidhm athghlaoite.event();
2 — Cruthaíonn sé réad
eventle 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
eventle 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 |
|---|---|---|
|
|
Feidhm atá sainmhínithe roimh ré le forghníomhú nuair a chraoltar an ócáid. |
|
|
Réad imeachta atá ann cheana le cóipeáil uaidh. |
|
|
Feidhm a ghlacann le hargóint pointeora folamh agus a fhorghníomhaítear nuair a chraoltar an imeacht. |
|
|
Pointeoir chuig sonraí a chuirfear chuig an fheidhm athghlaoite. |
Nótaí#
Stórálann réad
eventglao 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 Functionsvoid operator()( void (* callback)() );
Paraiméadar |
Cineál |
Cur síos |
|---|---|---|
|
|
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. |
Ní thugann an fheidhm seo luach ar ais.
NotesCuireann 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.
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.
void broadcast();
Ní ghlacann an fheidhm seo aon pharaiméadair.
Return ValuesNí 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 Functionsvoid broadcastAndWait( int32_t timeout = 60000 );
Paraiméadar |
Cineál |
Cur síos |
|---|---|---|
|
|
An méid milleasoicind le fanacht sula dtosaíonn an cód ag feidhmiú arís (réamhshocraithe go 60000). |
Ní thugann an fheidhm seo luach ar ais.
NotesNá 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.
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!");
}