Langat#
Johdanto#
Säikeet mahdollistavat robotin suorittaa useita tehtäviä samanaikaisesti saman ohjelman sisällä. Ne mahdollistavat moniajon, jolloin robotti voi suorittaa itsenäisiä toimintoja samanaikaisesti.
Luokanrakentajat#
1 — Luo ja aloittaa uuden säikeen funktiolla.
thread( void (* callback)(void) );
2 — Luo ja aloittaa uuden säikeen funktiolla, joka hyväksyy argumentin.
thread( int (* callback)(void *), void *arg );
Luokan tuhoaja#
Tuhoaa thread objektin ja vapauttaa siihen liittyvät resurssit.
~thread();
Parametrit#
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Aiemmin määritelty funktio, joka suoritetaan uudessa säikeessä. |
|
|
Aiemmin määritelty funktio, joka hyväksyy tyhjän osoittimen argumentin ja suoritetaan uudessa säikeessä. |
|
|
Tyhjä osoitin, joka välitetään takaisinkutsufunktiolle. |
Muistiinpanoja#
A function must always be defined before it is called.
Kun luot säikeen, voit nimetä sen hallitaksesi sitä erikseen projektissasi.
Kun säie on pysäytetty käyttämällä
interrupt(), sitä ei voida käynnistää uudelleen. Suorittaaksesi sen uudelleen sinun on luotava uusi säie.
Esimerkki#
Määrittele funktio (
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); } }Rekisteröi lanka
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); }
Määrittele funktio (
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); }Rekisteröi lanka
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); }
Jäsenten toiminnot#
Thread-luokka sisältää seuraavat jäsenfunktiot:
interrupt– Pysäyttää säikeen manuaalisesti, hyödyllinen taustalla tapahtuvan toiminnan pysäyttämiseksi.
interrupt#
Pysäyttää säikeen manuaalisesti, mikä on hyödyllistä, kun tehtävää ei enää tarvita tai kun ohjelman on nollattava säikeet.
Available Functionsvoid interrupt();
Tällä funktiolla ei ole parametreja.
Return ValuesTämä funktio ei palauta arvoa.
NotesKun säie on pysäytetty, sitä ei voi käynnistää uudelleen. Suorittaaksesi sen uudelleen, sinun on luotava uusi säie käyttämällä
thread-metodia.Tästä on hyötyä, kun tehtävää ei enää tarvita tai kun ohjelman on nollattava tai uudelleenmääritettävä säikeitä.
Määrittele funktio (
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); } }Rekisteröi lanka
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(); }