Fils#
Introduction#
Les threads permettent à un robot d’exécuter plusieurs tâches simultanément au sein d’un même programme. Ils rendent possible le multitâche, permettant au robot d’effectuer des actions indépendantes en même temps.
Constructeurs de classes#
1 — Crée et démarre un nouveau thread avec une fonction.
thread( void (* callback)(void) );
2 — Crée et démarre un nouveau thread avec une fonction qui accepte un argument.
thread( int (* callback)(void *), void *arg );
Destructeur de classe#
Destroys the thread object and releases associated resources.
~thread();
Paramètres#
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Une fonction préalablement définie qui sera exécutée dans le nouveau thread. |
|
|
Une fonction préalablement définie qui accepte un argument de type pointeur void et qui s’exécutera dans le nouveau thread. |
|
|
Un pointeur void passé à la fonction de rappel. |
Notes#
Une fonction doit toujours être définie avant d’être appelée.
Lorsque vous créez un thread, vous pouvez le nommer afin de le gérer individuellement dans votre projet.
Une fois qu’un thread est arrêté à l’aide de
interrupt(), il ne peut pas être redémarré. Pour l’exécuter à nouveau, vous devez créer un nouveau thread.
Exemple#
Définissez la fonction (en dehors de
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); } }Enregistrez le thread à l’intérieur de
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); }
Définissez la fonction (en dehors de
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); }Enregistrez le thread à l’intérieur de
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); }
Fonctions des membres#
La classe Thread comprend les fonctions membres suivantes :
interrupt– Arrête un thread manuellement, utile pour interrompre le comportement en arrière-plan.
interrupt#
Permet d’arrêter manuellement un thread, ce qui est utile lorsqu’une tâche n’est plus nécessaire ou lorsqu’un programme doit réinitialiser des threads.
Available Functionsvoid interrupt();
Cette fonction ne possède pas de paramètres.
Return ValuesCette fonction ne renvoie aucune valeur.
NotesUne fois un thread arrêté, il ne peut pas être redémarré. Pour le relancer, vous devez créer un nouveau thread à l’aide de la fonction
thread.Ceci est utile lorsqu’une tâche n’est plus nécessaire ou lorsqu’un programme doit réinitialiser ou réaffecter des threads.
Définissez la fonction (en dehors de
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); } }Enregistrez le thread à l’intérieur de
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(); }