থ্রেড#
ভূমিকা#
থ্রেড একটি রোবটকে একই প্রোগ্রামের মধ্যে একযোগে একাধিক কাজ চালাতে সাহায্য করে। এগুলি মাল্টিটাস্কিং সক্ষম করে, যার ফলে রোবট একই সময়ে স্বাধীন কাজগুলি সম্পাদন করতে পারে।
ক্লাস কনস্ট্রাক্টর#
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(); }