Message loop in Microsoft Windows
मैसेज लूप प्रत्येक प्रोग्राम में कोड का एक अनिवार्य खंड है जो माइक्रोसॉफ्ट विंडोज के तहत एक ग्राफिकल यूजर इंटरफेस का उपयोग करता है। जिन विंडोज प्रोग्रामों में जी. यू. आई. होता है, वे घटना-संचालित होते हैं। विंडोज प्रत्येक धागे के लिए एक व्यक्तिगत संदेश कतार रखता है जिसने एक विंडो बनाई है। आम तौर पर केवल पहला धागा खिड़कियाँ बनाता है। जब भी उस धागे की खिड़की पर माउस गतिविधि होती है, जब भी कीबोर्ड गतिविधि होती है जबकि उस खिड़की में फोकस होता है, और अन्य समय पर विंडोज उस कतार में संदेश रखता है। एक प्रक्रिया अपनी कतार में संदेश भी जोड़ सकती है। उपयोगकर्ता के इनपुट को स्वीकार करने के लिए, और अन्य कारणों से, एक विंडो के साथ प्रत्येक धागे को लगातार अपनी कतार से संदेशों को पुनः प्राप्त करना चाहिए, और उन पर कार्य करना चाहिए। एक प्रोग्रामर एक लूप लिखकर प्रक्रिया को करता है जो गेटमैसेज को कॉल करता है (जो एक संदेश के लिए ब्लॉक करता है और इसे पुनर्प्राप्त करता है), और फिर डिस्पैचमैसेज को कॉल करता है (जो संदेश भेजता है), और अनिश्चित काल तक दोहराता है। यह संदेश लूप है। आम तौर पर मुख्य कार्यक्रम में एक संदेश लूप होता है, जो मुख्य धागे पर चलता है, और प्रत्येक बनाए गए मोडल संवाद में अतिरिक्त संदेश लूप होता है। प्रक्रिया की प्रत्येक खिड़की के लिए संदेश इसकी संदेश कतार से गुजरते हैं, और इसके संदेश लूप द्वारा नियंत्रित किए जाते हैं। एक संदेश लूप एक प्रकार का घटना लूप है। एक बुनियादी संदेश लूप इस प्रकार दिखाई देता हैः इंट विनेपी विनमैन (इंस्टैंस इंस्टैंस, इंस्टैंस एच. प्रीवइंस्टैंस, एल. पी. एस. टी. आर. एल. पी. सी. एम. डी. लाइन, इंट एन. सी. एम. डी. शो) {एम. एस. जी. एम. एस. जी.; बूल ब्रेट; जबकि (1) {बी. आर. ई. टी. = गेटमैसेज (& एम. एस. जी., एन. यू. एल. एल., 0,0); यदि (बी. आर. ई. टी. = =-1)// अगर बी. आर. ई. टी.-1 है, तो गेटमैसेज विफल हो गया है। {// त्रुटि को संभालें या लॉग करें; संभवतः बाहर निकलें। //.} अन्यथा यदि (bRet! = 0)// यदि bRet 0 या-1 नहीं है, तो संदेश को संसाधित किया जाना चाहिए। यदि bRet 0 है, तो संदेश लूप बाहर निकल जाना चाहिए। {ब्रेक;}} रिटर्न msg.wParam;} इवेंट लूप के लिए प्रत्येक संदेश पर ट्रांसलेटमैसेज को कॉल करना पारंपरिक है जो वर्चुअल कीस्ट्रोक को स्ट्रिंग में अनुवाद कर सकता है। ट्रांसलेटमैसेज पर कॉल करना तकनीकी रूप से आवश्यक नहीं है, लेकिन अगर इसे कॉल नहीं किया जाता है तो समस्याएँ हो सकती हैं। संदेश लूप को डिस्पैचमैसेज पर कॉल करना चाहिए। संदेश लूप सीधे उन संदेशों पर कार्य नहीं करता है जिन्हें वह संभालता है। यह उन्हें डिस्पैचमैसेज पर कॉल करके भेजता है, जो संदेश को उस विंडो के लिए "विंडो प्रक्रिया" में स्थानांतरित करता है जिसे संदेश संबोधित किया गया था। ("विंडो प्रक्रिया" एक कॉलबैक प्रक्रिया है, जो विंडो वर्ग के पंजीकृत होने पर उससे जुड़ी हुई थी।) (एक से अधिक विंडो एक ही विंडो प्रक्रिया का उपयोग कर सकते हैं।) कोड सीधे विंडो प्रक्रिया में भी संदेश भेज सकता है। इन्हें नॉनक्यूएड संदेश कहा जाता है। एक सख्त संदेश लूप एकमात्र विकल्प नहीं है। प्रोग्राम में कहीं और कोड भी संदेशों को स्वीकार और भेज सकता है। पीकमैसेज एक नॉन-ब्लॉकिंग कॉल है जो तुरंत वापस आती है, एक संदेश के साथ यदि कोई प्रतीक्षा कर रहा है, या कोई संदेश नहीं है यदि कोई प्रतीक्षा नहीं कर रहा है। वेटमैसेज एक धागे को तब तक सोने देता है जब तक कि कोई संदेश कतार में न हो। आधुनिक ग्राफिकल इंटरफेस फ्रेमवर्क, जैसे कि विंडोज फॉर्म, विंडोज प्रेजेंटेशन फाउंडेशन, एम. एफ. सी., डेल्फी, क्यू. टी. और अन्य को विंडोज संदेश लूप को कोड करने के लिए अनुप्रयोगों की आवश्यकता नहीं होती है, क्योंकि वे स्वचालित रूप से की प्रेस और माउस क्लिक जैसी घटनाओं को उनके उपयुक्त संचालकों के लिए रूट करते हैं जैसा कि फ्रेमवर्क के भीतर परिभाषित किया गया है। हालांकि, प्रत्येक ढांचा कहीं न कहीं एक संदेश लूप को लागू करता है, और संदेश लूप को आमतौर पर अधिक प्रत्यक्ष नियंत्रण की आवश्यकता होने पर एक्सेस या प्रतिस्थापित किया जा सकता है। एक्स विंडो सिस्टम में इवेंट लूप के लिए एक्सलिब भी देखें बाहरी लिंक एमएफसी मैसेज एंड कमांड रूटिंग की भूलभुलैया के माध्यम से घूमना (एमएसजे, जुलाई 1995) ए कीज़ ओडिसीः वीसीएल प्लेटफॉर्म एसडीके के माध्यम से एक कीस्ट्रोक संदेश का मार्गः संदेश और संदेश कतारें प्लेटफॉर्म एसडीकेः विंडोज एपीआईः संदेश और संदेश कतारों का उपयोग करके संदेश लूप में प्रवेश करना (एमएसडीएन) गेटमैसेज फ़ंक्शन पीकमैसेज फ़ंक्शन इवेंट (कंप्यूटिंग) माइक्रोसॉफ्ट एप्लिकेशन प्रोग्रामिंग इंटरफेस