Vītnes#
Ievads#
Pavedi ļauj robotam vienlaikus izpildīt vairākus uzdevumus vienas programmas ietvaros. Tie nodrošina vairākuzdevumu veikšanu, ļaujot robotam vienlaikus veikt neatkarīgas darbības.
Klases konstruktori#
1 — Izveido un sāk jaunu pavedienu ar funkciju.
thread( void (* callback)(void) );
2 — Izveido un sāk jaunu pavedienu ar funkciju, kas pieņem argumentu.
thread( int (* callback)(void *), void *arg );
Klases iznīcinātājs#
Iznīcina thread objektu un atbrīvo saistītos resursus.
~thread();
Parametri#
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Iepriekš definēta funkcija, kas darbosies jaunajā pavedienā. |
|
|
Iepriekš definēta funkcija, kas pieņem tukša rādītāja argumentu un darbosies jaunajā pavedienā. |
|
|
Tukšs rādītājs, kas tiek nodots atzvanīšanas funkcijai. |
Piezīmes#
A function must always be defined before it is called.
Izveidojot pavedienu, varat tam piešķirt nosaukumu, lai to pārvaldītu atsevišķi savā projektā.
Kad pavediens ir apturēts, izmantojot
interrupt(), to nevar restartēt. Lai to palaistu vēlreiz, ir jāizveido jauns pavediens.
Piemērs#
Definējiet funkciju (ārpus
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); } }Reģistrējiet pavedienu iekšpusē
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); }
Definējiet funkciju (ārpus
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); }Reģistrējiet pavedienu iekšpusē
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); }
Dalībnieku funkcijas#
Vītnes klasē ir iekļautas šādas dalībfunkcijas:
interrupt– Manuāli aptur pavedienu, kas ir noderīgi fona darbību apturēšanai.
interrupt#
Manuāli aptur pavedienu, kas ir noderīgi, ja uzdevums vairs nav nepieciešams vai ja programmai ir jāatiestata pavedieni.
Available Functionsvoid interrupt();
Šai funkcijai nav parametru.
Return ValuesŠī funkcija neatgriež vērtību.
NotesKad pavediens ir apturēts, to nevar restartēt. Lai to palaistu vēlreiz, ir jāizveido jauns pavediens, izmantojot
thread.Tas ir noderīgi, ja uzdevums vairs nav nepieciešams vai ja programmai ir jāatiestata vai jāpiešķir pavedieni atkārtoti.
Definējiet funkciju (ārpus
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); } }Reģistrējiet pavedienu iekšpusē
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(); }