Siūlai#
Įvadas#
Gijos leidžia robotui vienu metu vykdyti kelias užduotis toje pačioje programoje. Jos įgalina daugiaprogramį darbą, leisdamos robotui atlikti nepriklausomus veiksmus tuo pačiu metu.
Klasės konstruktoriai#
1 — Sukuria ir pradeda naują giją su funkcija.
thread( void (* callback)(void) );
2 — Sukuria ir pradeda naują giją su funkcija, kuri priima argumentą.
thread( int (* callback)(void *), void *arg );
Klasės destruktorius#
Sunaikina thread objektą ir išlaisvina susijusius išteklius.
~thread();
Parametrai#
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Anksčiau apibrėžta funkcija, kuri veiks naujoje gijoje. |
|
|
Anksčiau apibrėžta funkcija, kuri priima argumentą „void pointer“ ir veiks naujoje gijoje. |
|
|
Tuščia rodyklė, kuri perduodama atgalinio iškvietimo funkcijai. |
Pastabos#
A function must always be defined before it is called.
Sukūrę giją, galite ją pavadinti, kad galėtumėte ją valdyti atskirai savo projekte.
Kai gija sustabdoma naudojant
interrupt(), jos negalima paleisti iš naujo. Norėdami ją vėl paleisti, turite sukurti naują giją.
Pavyzdys#
Apibrėžkite funkciją (už
int main())// Drive forward while blinking screen void blinkScreen() { while (true) { Brain.Screen.clearScreen(red); wait(0.5, seconds); Brain.Screen.clearScreen(); wait(0.5, seconds); } }Užregistruokite giją viduje
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code thread blinkScreenThread = thread(blinkScreen); Drivetrain.drive(forward); }
Apibrėžkite funkciją (už
int main())// Run multiple threads simultaneously // Turn right, blink screen at once void blinkScreen() { while (true) { Brain.Screen.clearScreen(red); wait(0.5, seconds); Brain.Screen.clearScreen(); wait(0.5, seconds); } } void turning() { Drivetrain.turn(right); }Užregistruokite giją viduje
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code thread blinkScreenThread = thread(blinkScreen); thread turningThread = thread(turning); }
Narių funkcijos#
Gija klasė apima šias narines funkcijas:
interrupt– Sustabdo giją rankiniu būdu, naudinga norint sustabdyti foninį elgesį.
interrupt#
Rankiniu būdu sustabdo giją, o tai naudinga, kai užduoties nebereikia arba kai programai reikia iš naujo nustatyti gijas.
Available Functionsvoid interrupt();
Ši funkcija neturi parametrų.
Return ValuesŠi funkcija negrąžina reikšmės.
NotesSustabdžius giją, jos paleisti iš naujo negalima. Norėdami ją vėl paleisti, turite sukurti naują giją naudodami
thread.Tai naudinga, kai užduotis nebereikalinga arba kai programai reikia iš naujo nustatyti arba priskirti gijas.
Apibrėžkite funkciją (už
int main())// Loop through red and green void colorLoop() { while (true) { Brain.Screen.drawRectangle(0, 120, 480, 120, red); wait(0.5, seconds); Brain.Screen.drawRectangle(0, 120, 480, 120, green); wait(0.5, seconds); } } // Display the current heading void displayHeading() { Brain.Screen.setFont(prop60); while (true) { Brain.Screen.clearLine(1); Brain.Screen.setCursor(1, 1); Brain.Screen.print( "Heading: %.1f", DrivetrainInertial.heading(degrees) ); wait(50, msec); } }Užregistruokite giją viduje
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Turn right, change screen color, and display heading at once thread colorThread = thread(colorLoop); thread displayHeadingThread = thread(displayHeading); Drivetrain.turn(right); wait(2, seconds); // Stop the flashing colors colorThread.interrupt(); }