থ্রেড#

ভূমিকা#

থ্রেড একটি রোবটকে একই প্রোগ্রামের মধ্যে একযোগে একাধিক কাজ চালাতে সাহায্য করে। এগুলি মাল্টিটাস্কিং সক্ষম করে, যার ফলে রোবট একই সময়ে স্বাধীন কাজগুলি সম্পাদন করতে পারে।

ক্লাস কনস্ট্রাক্টর#

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();
}