ത്രെഡുകൾ#
ആമുഖം#
ത്രെഡുകൾ ഒരു റോബോട്ടിനെ ഒരേ പ്രോഗ്രാമിൽ ഒരേസമയം ഒന്നിലധികം ജോലികൾ ചെയ്യാൻ അനുവദിക്കുന്നു. മൾട്ടിടാസ്കിംഗ് സാധ്യമാക്കുന്നതിലൂടെ, റോബോട്ടിന് ഒരേ സമയം സ്വതന്ത്രമായ പ്രവർത്തനങ്ങൾ നടത്താൻ കഴിയും.
ക്ലാസ് കൺസ്ട്രക്ടറുകൾ#
1 — ഒരു ഫംഗ്ഷൻ ഉപയോഗിച്ച് ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കുകയും ആരംഭിക്കുകയും ചെയ്യുന്നു.
thread( void (* callback)(void) );
2 — ഒരു ആർഗ്യുമെന്റ് സ്വീകരിക്കുന്ന ഒരു ഫംഗ്ഷൻ ഉപയോഗിച്ച് ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കുകയും ആരംഭിക്കുകയും ചെയ്യുന്നു.
thread( int (* callback)(void *), void *arg );
ക്ലാസ് ഡിസ്ട്രക്റ്റർ#
thread ഒബ്ജക്റ്റ് നശിപ്പിക്കുകയും അനുബന്ധ ഉറവിടങ്ങൾ പുറത്തുവിടുകയും ചെയ്യുന്നു.
~thread();
പാരാമീറ്ററുകൾ#
പാരാമീറ്റർ |
ടൈപ്പ് ചെയ്യുക |
വിവരണം |
|---|---|---|
|
|
പുതിയ ത്രെഡിൽ പ്രവർത്തിക്കുന്ന, മുമ്പ് നിർവചിക്കപ്പെട്ട ഒരു ഫംഗ്ഷൻ. |
|
|
ഒരു void പോയിന്റർ ആർഗ്യുമെന്റ് സ്വീകരിക്കുകയും പുതിയ ത്രെഡിൽ പ്രവർത്തിക്കുകയും ചെയ്യുന്ന, മുമ്പ് നിർവചിക്കപ്പെട്ട ഒരു ഫംഗ്ഷൻ. |
|
|
കോൾബാക്ക് ഫംഗ്ഷനിലേക്ക് കൈമാറുന്ന ഒരു ശൂന്യ പോയിന്റർ. |
കുറിപ്പുകൾ#
ഒരു ഫംഗ്ഷൻ വിളിക്കുന്നതിന് മുമ്പ് എല്ലായ്പ്പോഴും നിർവചിച്ചിരിക്കണം*.
നിങ്ങൾ ഒരു ത്രെഡ് സൃഷ്ടിക്കുമ്പോൾ, നിങ്ങളുടെ പ്രോജക്റ്റിൽ അത് വ്യക്തിഗതമായി കൈകാര്യം ചെയ്യുന്നതിനായി അതിന് പേര് നൽകാം.
interrupt()ഉപയോഗിച്ച് ഒരു ത്രെഡ് നിർത്തിയാൽ, അത് പുനരാരംഭിക്കാൻ കഴിയില്ല. അത് വീണ്ടും പ്രവർത്തിപ്പിക്കാൻ, നിങ്ങൾ ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കണം.
ഉദാഹരണം#
ഫംഗ്ഷൻ നിർവചിക്കുക (
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); } }
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); }
ഫംഗ്ഷൻ നിർവചിക്കുക (
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); }
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); }
അംഗ പ്രവർത്തനങ്ങൾ#
ത്രെഡ് ക്ലാസ്സിൽ ഇനിപ്പറയുന്ന അംഗ പ്രവർത്തനങ്ങൾ ഉൾപ്പെടുന്നു:
interrupt– പശ്ചാത്തല സ്വഭാവം നിർത്താൻ ഉപയോഗപ്രദമായ ഒരു ത്രെഡ് സ്വമേധയാ നിർത്തുന്നു.
interrupt#
ഒരു ത്രെഡ് സ്വമേധയാ നിർത്തുന്നു, ഒരു ടാസ്ക് ഇനി ആവശ്യമില്ലാത്തപ്പോഴോ ഒരു പ്രോഗ്രാമിന് ത്രെഡുകൾ പുനഃസജ്ജമാക്കേണ്ടിവരുമ്പോഴോ ഇത് ഉപയോഗപ്രദമാണ്.
Available Functionsvoid interrupt();
ഈ ഫംഗ്ഷന് പാരാമീറ്ററുകൾ ഇല്ല.
Return Valuesഈ ഫംഗ്ഷൻ ഒരു മൂല്യം തിരികെ നൽകുന്നില്ല.
Notesഒരു ത്രെഡ് നിർത്തിയാൽ, അത് പുനരാരംഭിക്കാൻ കഴിയില്ല. അത് വീണ്ടും പ്രവർത്തിപ്പിക്കാൻ, നിങ്ങൾ
threadഉപയോഗിച്ച് ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കണം.ഒരു ടാസ്ക് ഇനി ആവശ്യമില്ലാത്തപ്പോഴോ ഒരു പ്രോഗ്രാമിന് ത്രെഡുകൾ പുനഃസജ്ജമാക്കാനോ വീണ്ടും അസൈൻ ചെയ്യാനോ ആവശ്യമുള്ളപ്പോഴോ ഇത് ഉപയോഗപ്രദമാണ്.
ഫംഗ്ഷൻ നിർവചിക്കുക (
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); } }
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(); }