Trådar#
Introduktion#
Trådar gör det möjligt för en robot att köra flera uppgifter samtidigt inom samma program. De möjliggör multitasking, vilket gör att roboten kan utföra oberoende åtgärder samtidigt.
Klasskonstruktörer#
1 — Skapar och startar en ny tråd med en funktion.
thread( void (* callback)(void) );
2 — Skapar och startar en ny tråd med en funktion som accepterar ett argument.
thread( int (* callback)(void *), void *arg );
Klassförstörare#
Förstör thread objektet och frigör tillhörande resurser.
~thread();
Parametrar#
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
En tidigare definierad funktion som kommer att köras i den nya tråden. |
|
|
En tidigare definierad funktion som accepterar ett void-pekarargument och körs i den nya tråden. |
|
|
En tomgångspekare som skickas till callback-funktionen. |
Anteckningar#
En funktion måste alltid definieras innan den anropas.
När du skapar en tråd kan du namnge den för att hantera den individuellt i ditt projekt.
När en tråd har stoppats med
interrupt()kan den inte startas om. För att köra den igen måste du skapa en ny tråd.
Exempel#
Definiera funktionen (utanför
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); } }Registrera tråden inuti
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); }
Definiera funktionen (utanför
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); }Registrera tråden inuti
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); }
Medlemsfunktioner#
Trådklassen innehåller följande medlemsfunktioner:
interrupt– Stoppar en tråd manuellt, användbart för att stoppa bakgrundsbeteende.
interrupt#
Stoppar en tråd manuellt, vilket är användbart när en uppgift inte längre behövs eller när ett program behöver återställa trådar.
Available Functionsvoid interrupt();
Den här funktionen har inga parametrar.
Return ValuesDen här funktionen returnerar inget värde.
NotesNär en tråd har stoppats kan den inte startas om. För att köra den igen måste du skapa en ny tråd med
thread.Detta är användbart när en uppgift inte längre behövs eller när ett program behöver återställa eller omtilldela trådar.
Definiera funktionen (utanför
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); } }Registrera tråden inuti
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(); }