धागे#

परिचय#

थ्रेड्स की मदद से रोबोट एक ही प्रोग्राम के भीतर एक साथ कई कार्य कर सकता है। ये मल्टीटास्किंग को सक्षम बनाते हैं, जिससे रोबोट एक ही समय में स्वतंत्र क्रियाएं कर सकता है।

क्लास कंस्ट्रक्टर#

1 — एक फ़ंक्शन के साथ एक नया थ्रेड बनाता और शुरू करता है।

thread( void (* callback)(void) );

2 — एक फ़ंक्शन के साथ एक नया थ्रेड बनाता और शुरू करता है जो एक तर्क स्वीकार करता है।

thread( int (* callback)(void *), void *arg );

क्लास डिस्ट्रक्टर#

यह thread ऑब्जेक्ट को नष्ट करता है और उससे जुड़े संसाधनों को मुक्त करता है।

~thread();

पैरामीटर#

पैरामीटर

प्रकार

विवरण

callback

void (*)(void)

एक पूर्व-परिभाषित फ़ंक्शन जो नए थ्रेड में चलेगा।

callback

int (*)(void *)

एक पूर्व-परिभाषित फ़ंक्शन जो एक शून्य पॉइंटर तर्क स्वीकार करता है और नए थ्रेड में चलेगा।

arg

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 Functions
void interrupt();

Parameters

इस फ़ंक्शन में कोई पैरामीटर नहीं है।

Return Values

इस कार्य पर कीमत के लिहाज से कुछ भी रिटर्न नहीं मिलता है।

Notes
  • एक बार थ्रेड बंद हो जाने पर, उसे पुनः आरंभ नहीं किया जा सकता। उसे दोबारा चलाने के लिए, आपको thread फ़ंक्शन का उपयोग करके एक नया थ्रेड बनाना होगा।

  • यह तब उपयोगी होता है जब किसी कार्य की अब आवश्यकता नहीं होती है या जब किसी प्रोग्राम को थ्रेड्स को रीसेट या पुन: असाइन करने की आवश्यकता होती है।

Examples

फ़ंक्शन को परिभाषित करें ( 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();
}