मैं एक आईओ पूर्णता पोर्ट आधारित सर्वर (source code here) लिख रहा हूं, पाइथन में विंडोज़ डीएलएल एपीआई का उपयोग करके ctypes मॉड्यूल का उपयोग कर। लेकिन यह एपीआई का एक बहुत सी प्रत्यक्ष उपयोग है और यह प्रश्न उन लोगों पर निर्देशित है जिन्हें आईओसीपी का ज्ञान है, पायथन नहीं।आईओ पूर्णता पोर्ट कुंजी भ्रम
जैसा कि मैं CreateIoCompletionPort के लिए प्रलेखन को समझता हूं, आप अपनी "उपयोगकर्ता परिभाषित" समापन कुंजी निर्दिष्ट करते हैं जब आप इस फ़ंक्शन को फ़ाइल हैंडल (मेरे मामले में सॉकेट) के साथ कॉल करते हैं, तो आप बनाए गए IOCP से संबद्ध होते हैं। जब आप GetQueuedCompletionStatus को कॉल करने के लिए चारों ओर जाते हैं, तो आपको एक ओवरलैप्ड ऑब्जेक्ट के पॉइंटर के साथ एक पूर्णता कुंजी मान मिलता है। समापन कुंजी को पहचानना चाहिए कि ओवरलैप्ड ऑब्जेक्ट और अनुरोध पूरा हो गया है।
हालांकि, मान लीजिए कि मैं अपने CreateIoCompletionPort कॉल में एक ओवरलैप्ड ऑब्जेक्ट के साथ पूर्णता कुंजी के रूप में 100 में पास करता हूं। जब एक ही ओवरलैप्ड ऑब्जेक्ट में आईओओ पूरा हो जाता है और यह GetQueuedCompletionStatus के माध्यम से वापस आता है, तो इसके साथ पूर्ण होने वाली कुंजी बहुत बड़ी होती है और 100 के मूल मान के समान नहीं होती है।
क्या मैं गलत समझता हूं कि पूर्णता कुंजी कैसे काम करती है, या क्या मुझे उपरोक्त लिंक स्रोत स्रोत में गलत करना होगा?
"मान लीजिए कि मैं अपने CreateIoCompletionPort कॉल में एक ओवरलैप्ड ऑब्जेक्ट के साथ पूर्णता कुंजी के रूप में 100 में पास करता हूं। जब एक ही ओवरलैप्ड ऑब्जेक्ट का आईओ पूरा हो जाता है और यह GetQueuedCompletionStatus के माध्यम से वापस आता है, तो इसके साथ पूर्णता कुंजी बहुत बड़ी और बार्स होती है 100 के मूल मूल्य के साथ कोई समानता नहीं है। " मेरे प्रश्न से और मैं स्रोत कोड में इसकी तुलना क्यों नहीं कर रहा हूं। शायद आप ओवरलैप्ड ऑब्जेक्ट को कचरा प्राप्त करने के बारे में सही हैं, लेकिन यह सवाल के लिए अप्रासंगिक है। –