मैं कुछ कोड लिख रहा हूं जो कुछ मौजूदा को प्रतिस्थापित करता है:जीसीडी डिस्पैच स्रोतों और चयन() के बीच क्या अंतर है?
while(runEventLoop){
if(select(openSockets, readFDS, writeFDS, errFDS, timeout) > 0){
// check file descriptors for activity and dispatch events based on same
}
}
सॉकेट रीडिंग कोड। मैं इसे एक जीसीडी कतार का उपयोग करने के लिए बदलना चाहता हूं, ताकि मैं "अगले पुनरावृत्ति पर कॉल किया जाना चाहिए" सरणी को बनाए रखने के बजाय dispatch_async का उपयोग करके कतार में ईवेंट पॉप कर सकूं। मैं पहले से ही इस विशेष कार्रवाई के लिए एक जीसीडी कतार का उपयोग कर रहा हूं, इसलिए इसे अधिक प्राकृतिक जीसीडी प्रेषण फ़ॉर्म में समर्पित करना चाहता हूं। (थोड़ी देर() लूप एक सीरियल कतार का एकाधिकार नहीं कर रहा है)
हालांकि, जब मैंने इसे एक ऐसे रूप में दोबारा करने की कोशिश की जो प्रेषण स्रोतों पर निर्भर करता है जो सॉकेट डिस्क्रिप्टर पर DISPATCH_SOURCE_TYPE_READ और DISPATCH_SOURCE_TYPE_WRITE से जुड़े ईवेंट हैंडलर से निकाला गया है, लाइब्रेरी कोड इस शेड्यूलिंग पर निर्भर काम करना बंद कर दिया। मेरी पहली धारणा यह है कि मैं DISPATCH_SOURCE_TYPE_READ और DISPATCH_SOURCE_TYPE_WRITE के उपयोग को गलत समझा रहा हूं - मैंने माना था कि वे उन सॉकेट डिस्क्रिप्टरों के साथ चयन() को कॉल करने के समान मोटे तौर पर वही व्यवहार करेंगे।
क्या मैं जीसीडी प्रेषण स्रोतों को गलत समझता हूं? या, रिफैक्टर के संबंध में, क्या मैं इसे ऐसी परिस्थिति में उपयोग कर रहा हूं जहां यह सबसे उपयुक्त नहीं है?
आपको अपना कोड दिखाना चाहिए - आपने जो कोशिश की थी। इस बीच, माइक एश के पास कुछ नमूना कोड है - http://www.mikeash.com/svn/GCDWeb/GCDWeb.m - जीसीडी वेब सर्वर। – robertvojta