ইভেন্টগুলি#
ভূমিকা#
ইভেন্ট আপনাকে অ্যাসিঙ্ক্রোনাসভাবে একটি ফাংশন শুরু করতে দেয়। যখন কোনো ইভেন্ট ব্রডকাস্ট করা হয়, তখন সেই ইভেন্টের কলব্যাক ফাংশনটি নিজস্ব টাস্কে (থ্রেডে) চালু হয়, ফলে আপনার মূল কোড একই সময়ে চলতে পারে।
গুরুত্বপূর্ণ: একটি event অবজেক্টে একটি কলব্যাক সংরক্ষিত থাকে। আপনি যদি একই ইভেন্ট অবজেক্ট দিয়ে অন্য কোনো ফাংশন রেজিস্টার করেন, তবে এটি পূর্ববর্তী কলব্যাকটিকে প্রতিস্থাপন করে।
যদি আপনি একটি ট্রিগার থেকে একাধিক কাজ ঘটাতে চান, তাহলে হয়:
একটিমাত্র কলব্যাক থেকে একাধিক সহায়ক ফাংশন কল করুন, অথবা
একাধিক ইভেন্ট অবজেক্ট ব্যবহার করুন এবং প্রতিটি ব্রডকাস্ট করুন।
কাজগুলো স্বাধীনভাবে চালানোর জন্য আলাদা থ্রেড ব্যবহার করুন।
একটি ইভেন্ট তৈরি ও ব্যবহার করার জন্য, ক্রমানুসারে এই ধাপগুলো অনুসরণ করুন:
eventদিয়ে ইভেন্টটি তৈরি করুন।ইভেন্টের নাম ব্যবহার করে ইভেন্টের কলব্যাক সেট করুন (উদাহরণ:
myEvent(myCallback);)।Broadcast an
event:broadcast— একটি ইভেন্ট অবজেক্টে নিবন্ধিত সমস্ত ফাংশনকে সমান্তরালভাবে চালানোর জন্য ট্রিগার করে।broadcastAndWait— একটি ইভেন্ট অবজেক্টে নিবন্ধিত সমস্ত ফাংশন ট্রিগার করে এবং চালিয়ে যাওয়ার আগে সেগুলি শেষ হওয়ার জন্য অপেক্ষা করে।
ক্লাস কনস্ট্রাক্টর#
1 — কোনো কলব্যাক ফাংশন ছাড়া একটি
eventঅবজেক্ট তৈরি করে।event();
2 — একটি কলব্যাক ফাংশন সহ একটি
eventঅবজেক্ট তৈরি করে।event( void (* callback)(void) );
3 — একটি কলব্যাক ফাংশনের মাধ্যমে অন্য একটি ইভেন্ট থেকে একটি
eventঅবজেক্ট তৈরি করে।event( event v, void (* callback)(void) );
4 — একটি আর্গুমেন্ট গ্রহণকারী কলব্যাক ফাংশনসহ একটি
eventঅবজেক্ট তৈরি করে।event( void (* callback)(void *), void *arg );
5 — একটি আর্গুমেন্ট গ্রহণকারী কলব্যাক ফাংশনের মাধ্যমে অন্য একটি ইভেন্ট থেকে একটি
eventঅবজেক্ট তৈরি করে।event( event v, void (* callback)(void *), void *arg );
ক্লাস ডেস্ট্রাক্টর#
event অবজেক্টটি ধ্বংস করে এবং সংশ্লিষ্ট রিসোর্সসমূহ মুক্ত করে।
~event();
প্যারামিটার#
প্যারামিটার |
প্রকার |
বর্ণনা |
|---|---|---|
|
|
একটি ফাংশন যা ইভেন্টটি সম্প্রচারিত হলে কার্যকর হওয়ার জন্য পূর্বেই সংজ্ঞায়িত করা থাকে। |
|
|
অনুলিপি করার জন্য একটি বিদ্যমান ইভেন্ট অবজেক্ট। |
|
|
এমন একটি ফাংশন যা একটি ভয়েড পয়েন্টার আর্গুমেন্ট গ্রহণ করে এবং ইভেন্টটি ব্রডকাস্ট হলে কার্যকর হয়। |
|
|
ডেটার একটি পয়েন্টার যা কলব্যাক ফাংশনে পাঠানো হবে। |
নোট#
একটি
eventঅবজেক্ট একটি কলব্যাক সংরক্ষণ করে। আপনি যদি একই ইভেন্ট অবজেক্ট দিয়ে অন্য কোনো ফাংশন রেজিস্টার করেন, তবে এটি পূর্ববর্তী কলব্যাকটিকে প্রতিস্থাপন করে।যদি আপনি একটি ট্রিগার থেকে একাধিক কাজ ঘটাতে চান, তাহলে হয়:
একটিমাত্র কলব্যাক থেকে একাধিক সহায়ক ফাংশন কল করুন, অথবা
একাধিক ইভেন্ট অবজেক্ট ব্যবহার করুন এবং প্রতিটি ব্রডকাস্ট করুন।
কাজগুলো স্বাধীনভাবে চালানোর জন্য পৃথক থ্রেড ব্যবহার করুন।
উদাহরণ#
// Create a callback function
void onMyEvent() {
Brain.Screen.print("Callback function executed!");
}
int main() {
// Create an event called myEvent and set onMyEvent
// as the callback function.
event myEvent(onMyEvent);
}
সদস্যদের কার্যাবলী#
event ক্লাসে নিম্নলিখিত মেম্বার ফাংশনগুলো অন্তর্ভুক্ত রয়েছে:
operator— ইভেন্টের জন্য একটি কলব্যাক ফাংশন সেট করে।broadcast— ইভেন্টের কলব্যাক ফাংশনটিকে সমান্তরালভাবে চালানোর জন্য ট্রিগার করে।broadcastAndWait— ইভেন্টের কলব্যাক ফাংশনটি ট্রিগার করে এবং সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে।
যেকোনো event মেম্বার ফাংশন কল করার আগে, একটি event ইনস্ট্যান্স তৈরি করতে হবে, যেমনটি নিচে দেখানো হয়েছে:
/* This constructor is required when using VS Code.
Event configuration can be created with or without
a callback function as shown in the examples above. */
// Create an event without a callback
event myEvent;
// Or create an event with a callback
event myEvent(onMyEvent);
operator#
ফাংশন কল অপারেটর ব্যবহার করে ইভেন্টটির জন্য একটি কলব্যাক ফাংশন সেট করা হয়।
Available Functionsvoid operator()( void (* callback)() );
প্যারামিটার |
প্রকার |
বর্ণনা |
|---|---|---|
|
|
পূর্বে সংজ্ঞায়িত একটি কলব্যাক ফাংশন যা ইভেন্টটি সম্প্রচারিত হলে স্বয়ংক্রিয়ভাবে কল করা হয়। ফাংশনটিকে অবশ্যই প্রয়োজনীয় কলব্যাক স্বাক্ষরের সাথে মিলতে হবে। আরও তথ্যের জন্য কলব্যাক ফাংশন দেখুন। |
এই ফাংশনটি কোনো মান ফেরত দেয় না।
Notesপুনরায় কলব্যাক সেট করলে পূর্ববর্তী কলব্যাকটি প্রতিস্থাপিত হয়।
কলব্যাক ফাংশনে কোনো প্যারামিটার থাকতে পারবে না এবং এটি void রিটার্ন করবে।
void drawSquare() {
Brain.Screen.clearScreen();
Brain.Screen.drawRectangle(40, 40, 120, 120);
}
void drawCircle() {
Brain.Screen.clearScreen();
Brain.Screen.drawCircle(100, 100, 60);
}
int main() {
// Create the event drawEvent.
event drawEvent;
Brain.Screen.print("Drawing a square...");
// Set the event to drawSquare.
drawEvent(drawSquare);
wait(1, seconds);
// Trigger the event.
drawEvent.broadcast();
wait(1, seconds);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Drawing a circle...");
// Replace drawSquare with drawCircle.
drawEvent(drawCircle);
wait(1, seconds);
// Trigger the event a second time.
drawEvent.broadcast();
}
broadcast#
broadcast ইভেন্টের কলব্যাক শুরু করে এবং অবিলম্বে চলতে থাকে।
void broadcast();
এই ফাংশনটি কোনো প্যারামিটার গ্রহণ করে না।
Return Valuesএই ফাংশনটি কোনো মান ফেরত দেয় না।
Examples// Create a callback function.
void onMyEvent() {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Event fired!");
}
int main() {
Brain.Screen.print("Broadcasting in 2 seconds...");
// Create an event called myEvent and set onMyEvent
// as the callback function.
event myEvent(onMyEvent);
wait(2, seconds);
// Trigger the event.
myEvent.broadcast();
}
broadcastAndWait#
কলব্যাকটি শুরু করে এবং এটি শেষ হওয়া পর্যন্ত (বা টাইম আউট হওয়া পর্যন্ত) অপেক্ষা করে।
Available Functionsvoid broadcastAndWait( int32_t timeout = 60000 );
প্যারামিটার |
প্রকার |
বর্ণনা |
|---|---|---|
|
|
কোডটি পুনরায় কার্যকর হওয়া শুরু করার আগে কত মিলিসেকেন্ড অপেক্ষা করতে হবে (ডিফল্ট মান ৬০০০০)। |
এই ফাংশনটি কোনো মান ফেরত দেয় না।
Notesএটি শুধুমাত্র সেইসব কলব্যাকের সাথে ব্যবহার করুন যেগুলোর সমাপ্তি ঘটে (কোনো অসীম লুপের ক্ষেত্রে নয়)।
এটি একটি অপেক্ষাকারী ফাংশন যা কলব্যাকটি সম্পূর্ণ না হওয়া পর্যন্ত বা এর সময়সীমা শেষ না হওয়া পর্যন্ত কার্য সম্পাদনকে আটকে রাখে।
void startDriving() {
Drivetrain.drive(forward);
wait(2, seconds);
}
int main() {
Brain.Screen.print("Starting drive...");
event driveEvent(startDriving);
// Give the event time to be set.
wait(0.25, seconds);
// Run the event and wait until it finishes.
driveEvent.broadcastAndWait();
// Stop driving after 2 seconds.
Drivetrain.stop();
Brain.Screen.clearScreen();
Brain.Screen.print("Drive complete!");
}