सामान्य तौर पर ईवेंट हैंडलर कैसे काम करते हैं?


14

यह एक सामान्य विषय है, इवेंट हैंडलर्स कैसे काम करते हैं?

यह पर्दे के पीछे का मतलब है - जब वे बनते हैं तो क्या होता है।

मेरे पास एक मोटा विचार है - लेकिन मैं इसकी पुष्टि करना चाहता हूं।



शानदार, ऑब्जर्वर पैटर्न वही था जो मैंने पाया था: मैंने इस मुद्दे के बारे में वेब पर पढ़ा है और इवेंट ड्रिवेन प्रोग्रामिंग के विषय पर एक अच्छा पेपर पढ़ा है। इस पत्र के भीतर यह हैंडलर डिजाइन पैटर्न की प्रक्रिया पर चर्चा करता है। जिससे आपके पास एक ऐसी घटना का स्टीम आता है जो डिस्पैचर में आती है जो उस घटना को लेती है और उसका ईवेंट प्रकार निर्धारित करने के लिए उसका विश्लेषण करती है, और फिर प्रत्येक ईवेंट को एक हैंडलर को भेजती है जो उस प्रकार की घटनाओं को हैंडल कर सकता है।
JHarley1

1
यह बताता है कि डिस्पैचर इसे एक अनंत लूप कैसे देता है जो केवल तब रुकता है जब (उदाहरण के लिए GUI एप्लिकेशन के साथ) प्रोग्राम बंद हो जाता है। और फिर आपके पास एक ऑब्जर्वर पैटर्न (या पब्लिश / सब्सक्राइब पैटर्न) कैसे है जिसका उपयोग व्यापक रूप से GUI फ्रेमवर्क के साथ Event-Driven Programming करने के लिए किया जाता है और यह कैसे काम करता है "इसके लिए हमें कॉल न करें हम आपको कॉल करेंगे" के हॉलीवुड के सिद्धांत पर काम करता है। ।
JHarley1

क्या आप कहेंगे कि उपरोक्त व्याख्या पर्याप्त है?
JHarley1

निर्भर करता है। उच्च स्तरीय अवलोकन के लिए, यह ठीक है। हालांकि, एक व्यापक और गहन विवरण के लिए, हेक नं। इस तरह के एक स्पष्टीकरण के रूप में पाठ्यक्रम काम के कई पृष्ठों की संभावना होगी क्योंकि यह उदाहरण के लिए वेब बनाम डेस्कटॉप इवेंट सामान में मिल सकता है, बल्कि फैंसी हो सकता है।
जेबी किंग

जवाबों:


15

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

बेशक, जिस तरह से इसे वास्तव में लागू किया गया है वह ओएस और डिवाइस / इनपुट के प्रकार पर निर्भर करता है। UNIX प्रणालियों पर, एक तरह से जो इवेंट हैंडलर को सॉकेट, सीरियल या यूएसबी पोर्ट जैसी चीजों के लिए लागू किया जाता है, चुनिंदा या पोल सिस्टम कॉल के माध्यम से होता है । एक या एक से अधिक फ़ाइल / डिवाइस डिस्क्रिप्टर (जो डिवाइस से जुड़े होते हैं, जैसे नेटवर्क सॉकेट, सीरियल / यूएसबी पोर्ट, आदि) pollसिस्टम कॉल को पास कर दिए जाते हैं - जो निम्न-स्तरीय सी एपीआई के माध्यम से प्रोग्रामर को उपलब्ध कराया जाता है। जब इन उपकरणों में से एक पर एक घटना होती है, (जैसे कहते हैं, कुछ डेटा एक सीरियल पोर्ट पर आता है), तो पोल सिस्टम कॉल ब्लॉक होना बंद हो जाता है, और एप्लिकेशन तब यह निर्धारित कर सकता है कि किस डिवाइस के डिस्क्रिप्टर ने ईवेंट का कारण बनाया, और यह किस प्रकार का ईवेंट था। ।

विंडोज पर यह अलग तरह से संभाला जाता है, लेकिन अवधारणाएं मूल रूप से समान हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.