कार्यक्रम#
परिचय#
इवेंट्स आपको किसी फ़ंक्शन को अतुल्यकालिक रूप से शुरू करने की अनुमति देते हैं। जब कोई इवेंट प्रसारित होता है, तो इवेंट का कॉलबैक फ़ंक्शन अपने स्वयं के टास्क (थ्रेड) में शुरू हो जाता है, जिससे आपका मुख्य कोड उसी समय चलता रह सकता है।
महत्वपूर्ण: एक 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 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 );
पैरामीटर |
प्रकार |
विवरण |
|---|---|---|
|
|
कोड के दोबारा चलना शुरू होने से पहले प्रतीक्षा करने के लिए मिलीसेकंड की संख्या (डिफ़ॉल्ट रूप से 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!");
}