कार्यक्रम#

परिचय#

इवेंट्स आपको किसी फ़ंक्शन को अतुल्यकालिक रूप से शुरू करने की अनुमति देते हैं। जब कोई इवेंट प्रसारित होता है, तो इवेंट का कॉलबैक फ़ंक्शन अपने स्वयं के टास्क (थ्रेड) में शुरू हो जाता है, जिससे आपका मुख्य कोड उसी समय चलता रह सकता है।

महत्वपूर्ण: एक event ऑब्जेक्ट में एक कॉलबैक संग्रहीत होता है। यदि आप उसी इवेंट ऑब्जेक्ट के साथ कोई अन्य फ़ंक्शन पंजीकृत करते हैं, तो यह पिछले कॉलबैक को प्रतिस्थापित कर देता है।

यदि आप एक ही ट्रिगर से कई चीजें घटित करवाना चाहते हैं, तो निम्न में से कोई एक तरीका अपनाएं:

  • एक ही कॉलबैक से कई सहायक फ़ंक्शन कॉल करें, या

  • कई इवेंट ऑब्जेक्ट का उपयोग करें और प्रत्येक को प्रसारित करें।

  • कार्यों को स्वतंत्र रूप से चलाने के लिए अलग-अलग थ्रेड्स का उपयोग करें।

किसी इवेंट को बनाने और फिर उसका उपयोग करने के लिए, इन चरणों का क्रमवार पालन करें:

  1. event के साथ घटना बनाएं।

  2. इवेंट के कॉलबैक को सेट करें इवेंट नाम का उपयोग करके (उदाहरण: myEvent(myCallback);)।

  3. 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();

पैरामीटर#

पैरामीटर

प्रकार

विवरण

callback

void (*)(void)

एक फ़ंक्शन जिसे पहले से परिभाषित किया गया है ताकि इवेंट प्रसारित होने पर वह निष्पादित हो सके।

v

event

प्रतिलिपि बनाने के लिए एक मौजूदा इवेंट ऑब्जेक्ट।

callback

void (*)(void *)

एक ऐसा फ़ंक्शन जो वॉइड पॉइंटर आर्गुमेंट स्वीकार करता है और इवेंट के ब्रॉडकास्ट होने पर निष्पादित होता है।

arg

void *

कॉलबैक फ़ंक्शन को पास किए जाने वाले डेटा का एक पॉइंटर।

नोट्स#

  • एक event ऑब्जेक्ट में एक कॉलबैक स्टोर होता है। यदि आप उसी इवेंट ऑब्जेक्ट के साथ एक और फ़ंक्शन रजिस्टर करते हैं, तो यह पिछले कॉलबैक को प्रतिस्थापित कर देता है।

  • यदि आप एक ही ट्रिगर से कई चीजें घटित करवाना चाहते हैं, तो निम्न में से कोई एक तरीका अपनाएं:

    • एक ही कॉलबैक से कई सहायक फ़ंक्शन कॉल करें, या

    • कई इवेंट ऑब्जेक्ट का उपयोग करें और प्रत्येक को प्रसारित करें।

    • कार्यों को स्वतंत्र रूप से चलाने के लिए अलग-अलग थ्रेड्स का उपयोग करें।

उदाहरण#

कॉलबैक फ़ंक्शन को परिभाषित करें ( int main() के बाहर)

// Create a callback function
void onMyEvent() {
  Brain.Screen.print("Callback function executed!");
}

int main() के अंदर कॉलबैक को रजिस्टर करें

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Create an event called myEvent
  // 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 Functions
void operator()( void (* callback)() );

Parameters

पैरामीटर

प्रकार

विवरण

callback

void (*)(void)

एक पूर्व-परिभाषित कॉलबैक फ़ंक्शन जिसे इवेंट प्रसारित होने पर स्वचालित रूप से कॉल किया जाता है। फ़ंक्शन का कॉलबैक सिग्नेचर आवश्यक है। अधिक जानकारी के लिए कॉलबैक फ़ंक्शन देखें।

Return Values

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

Notes
  • कॉलबैक को दोबारा सेट करने से पिछला कॉलबैक बदल जाता है।

  • कॉलबैक फ़ंक्शन में कोई पैरामीटर नहीं होना चाहिए और उसे वॉइड रिटर्न करना चाहिए।

Examples

कॉलबैक फ़ंक्शन को परिभाषित करें ( int main() के बाहर)

// Create a callback function
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() के अंदर कॉलबैक को रजिस्टर करें

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // 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 इवेंट के कॉलबैक को शुरू करता है और तुरंत जारी रखता है।

Member Functions
void broadcast();

Parameters

यह फ़ंक्शन कोई पैरामीटर नहीं लेता है।

Return Values

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

Examples

कॉलबैक फ़ंक्शन को परिभाषित करें ( int main() के बाहर)

// Create a callback function
void onMyEvent() {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Event fired!");
}

int main() के अंदर कॉलबैक को रजिस्टर करें

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  Brain.Screen.print("Broadcasting in 2 seconds...");

  // Create an event called myEvent
  // Set onMyEvent as the callback function
  event myEvent(onMyEvent);

  wait(2, seconds);

  // Trigger the event
  myEvent.broadcast();
}

broadcastAndWait#

कॉलबैक शुरू करता है और उसके समाप्त होने (या टाइम आउट होने) तक प्रतीक्षा करता है।

Available Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

पैरामीटर

प्रकार

विवरण

timeout

int32_t

कोड के दोबारा चलना शुरू होने से पहले प्रतीक्षा करने के लिए मिलीसेकंड की संख्या (डिफ़ॉल्ट रूप से 60000)।

Return Values

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

Notes
  • इसका उपयोग केवल उन कॉलबैक के साथ करें जो समाप्त हो जाते हैं (अनंत लूप के साथ नहीं)।

  • यह एक प्रतीक्षा फ़ंक्शन है जो कॉलबैक के पूरा होने या समय समाप्त होने तक निष्पादन को अवरुद्ध करता है।

Examples

कॉलबैक फ़ंक्शन को परिभाषित करें ( int main() के बाहर)

// Create a callback function
void startDriving() {
  Drivetrain.drive(forward);
  wait(2, seconds);
}

int main() के अंदर कॉलबैक को रजिस्टर करें

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  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!");
}