ओएस बाधा संचालकों विभिन्न प्रकार के माध्यम से पहुंचाया गया है अपने WindowProc के लिए जाना जाएगा ने कहा कि 'संदेश कतार में संदेश रखकर किया जाना चाहिए ', लेकिन जहां प्रक्रिया पता स्थान के भीतर यह कतार रहता है? यह इंटरप्ट हैंडलर कोड के संपर्क में कैसे है?
विंडोज थ्रेड से जुड़े हुए हैं। खिड़की के साथ प्रत्येक थ्रेड में प्रक्रिया की पता स्थान में एक थ्रेड कतार है। हार्डवेयर से उत्पन्न घटनाओं के लिए ओएस की अपनी पता स्थान में एक आंतरिक कतार है। घटना और अन्य राज्य की जानकारी के विवरण का उपयोग करना (उदा।, किस विंडो में फोकस है), ओएस हार्डवेयर घटनाओं को उन संदेशों में अनुवादित करता है जिन्हें उचित थ्रेड कतार में रखा जाता है।
पोस्ट किए गए संदेश सीधे लक्षित विंडो के लिए थ्रेड कतार में रखा गया है।
भेजे गए संदेश आमतौर पर सीधे संसाधित होते हैं (कतार को छोड़कर)।
विवरण बालों वाले हो जाते हैं। उदाहरण के लिए, थ्रेड कतार संदेशों की सूचियों से अधिक हैं - वे कुछ राज्य जानकारी भी बनाए रखते हैं। कुछ संदेश (जैसे WM_PAINT) वास्तव में कतारबद्ध नहीं होते हैं, लेकिन जब आप कतार पूछते हैं और यह खाली होता है तो अतिरिक्त राज्य जानकारी से संश्लेषित किया जाता है। अन्य धागे के स्वामित्व वाली खिड़कियों को भेजे गए संदेश वास्तव में सीधे संसाधित होने की बजाय रिसीवर की कतार में पोस्ट किए जाते हैं, लेकिन सिस्टम कॉलर के दृष्टिकोण से नियमित रूप से अवरुद्ध भेजने की तरह दिखाई देता है। Hilarity ensues अगर यह डेडलॉक का कारण बन सकता है (सर्कुलर के कारण मूल धागे पर वापस भेजता है)।
जेफरी रिचटर किताबों में गोरी के विवरण के बहुत सारे (सभी?) हैं। मेरा संस्करण पुराना है (उन्नत विंडोज़)। वर्तमान संस्करण को Windows via C/C++ कहा जाता है।
ओएस संदेश स्ट्रीम को कॉलर को तर्कसंगत (और अपेक्षाकृत सरल) दिखाई देने के लिए बहुत काम करता है।
संदेश का अनुवाद करने का क्या अर्थ है? अनुवाद संदेश() वास्तव में क्या करने के लिए कॉल करता है?
यह वर्चुअल कुंजी संदेशों के लिए देखता है और, जब यह कुंजी-डाउन/की-अप संयोजन को पहचानता है, तो यह वर्ण संदेश जोड़ता है। यदि आप TranslateMessage पर कॉल नहीं करते हैं, तो आपको WM_CHAR जैसे वर्ण संदेश प्राप्त नहीं होंगे।
मुझे संदेह है कि यह वापस लौटने से पहले चरित्र संदेश भेजता है (जैसा कि उन्हें पोस्ट करने के विपरीत)। मैंने कभी जांच नहीं की है, लेकिन मुझे याद है कि WM_CHAR संदेश WM_KEYUP से पहले पहुंचते हैं।
डिस्पैच मैसेज() द्वारा प्रेषित किए जाने के बाद, मेरे WNDProc तक पहुंचने से पहले संदेश क्या स्विंग करता है (यानी ओएस इसके साथ क्या करता है)?
डिस्पैच मैसेज लक्ष्य विंडो के लिए WNDProc को संदेश भेजता है। रास्ते में, कुछ हुक को संदेश देखने का मौका मिल सकता है (और संभवतः इसमें हस्तक्षेप)।
यह सब गलत है। इसके कुछ हिस्सों जो सही हैं, केवल तभी सही हैं जब प्रश्न Win16 के बारे में था जहां पूरे ओएस और अनुप्रयोगों को सह-ऑपरेटिव रूप से एक थ्रेड पर निर्धारित किया गया था। –