Hilos#
Introducción#
Los subprocesos permiten que un robot ejecute múltiples tareas simultáneamente dentro del mismo programa. Permiten la multitarea, dejando que el robot realice acciones independientes al mismo tiempo.
Constructores de clase#
1 — Crea e inicia un nuevo hilo con una función.
thread( void (* callback)(void) );
2 — Crea e inicia un nuevo hilo con una función que acepta un argumento.
thread( int (* callback)(void *), void *arg );
Destructor de clase#
Destruye el objeto thread y libera los recursos asociados.
~thread();
Parámetros#
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
Una función previamente definida que se ejecutará en el nuevo subproceso. |
|
|
Una función previamente definida que acepta un argumento de puntero vacío y se ejecutará en el nuevo subproceso. |
|
|
Un puntero vacío que se pasa a la función de devolución de llamada. |
Observaciones#
Una función debe definirse siempre antes de que se llame.
Cuando creas un hilo, puedes nombrarlo para administrarlo individualmente en tu proyecto.
Una vez que un hilo se detiene usando
interrupt(), no se puede reiniciar. Para volver a ejecutarlo, debe crear un nuevo hilo.
Ejemplo#
Defina la función (fuera 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); } }Registrar el hilo dentro 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); }
Defina la función (fuera 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); }Registrar el hilo dentro 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); }
Funciones de los miembros#
La clase de hilo incluye las siguientes funciones de miembro:
interrupt– Detiene un hilo manualmente, útil para detener el comportamiento en segundo plano.
interrupt#
Detiene un subproceso manualmente, lo cual es útil cuando ya no se necesita una tarea o cuando un programa necesita restablecer los subprocesos.
Available Functionsvoid interrupt();
Esta función no tiene parámetros.
Return ValuesEsta función no devuelve un valor.
NotesUna vez que se detiene un hilo, no se puede reiniciar. Para ejecutarlo de nuevo, debe crear un nuevo subproceso usando
thread.Esto es útil cuando una tarea ya no es necesaria o cuando un programa necesita restablecer o reasignar hilos.
Defina la función (fuera 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); } }Registrar el hilo dentro 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(); }