धागे#
परिचय#
थ्रेड्स की मदद से रोबोट एक ही प्रोग्राम के भीतर एक साथ कई कार्य कर सकता है। ये मल्टीटास्किंग को सक्षम बनाते हैं, जिससे रोबोट एक ही समय में स्वतंत्र क्रियाएं कर सकता है।
क्लास कंस्ट्रक्टर#
1 — एक फ़ंक्शन के साथ एक नया थ्रेड बनाता और शुरू करता है।
thread( void (* callback)(void) );
2 — एक फ़ंक्शन के साथ एक नया थ्रेड बनाता और शुरू करता है जो एक तर्क स्वीकार करता है।
thread( int (* callback)(void *), void *arg );
क्लास डिस्ट्रक्टर#
यह thread ऑब्जेक्ट को नष्ट करता है और उससे जुड़े संसाधनों को मुक्त करता है।
~thread();
पैरामीटर#
पैरामीटर |
प्रकार |
विवरण |
|---|---|---|
|
|
एक पूर्व-परिभाषित फ़ंक्शन जो नए थ्रेड में चलेगा। |
|
|
एक पूर्व-परिभाषित फ़ंक्शन जो एक शून्य पॉइंटर तर्क स्वीकार करता है और नए थ्रेड में चलेगा। |
|
|
एक शून्य पॉइंटर जिसे कॉलबैक फ़ंक्शन को पास किया जाता है। |
नोट्स#
किसी फंक्शन को कॉल करने से पहले उसे परिभाषित किया जाना चाहिए।*
जब आप कोई थ्रेड बनाते हैं, तो आप उसे अपने प्रोजेक्ट में अलग से प्रबंधित करने के लिए नाम दे सकते हैं।
एक बार जब किसी थ्रेड को
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(); }