2012-01-04 13 views
6

io_service :: poll_one एक तैयार हैंडलर निष्पादित करने के लिए io_service ऑब्जेक्ट के इवेंट प्रोसेसिंग लूप चलाएं।boost :: io_service poll_one और run_one के बीच क्या अंतर है?

बनाम

io_service :: run_one सबसे एक हैंडलर पर अमल करने के लिए io_service वस्तु की घटना प्रसंस्करण पाश चलाएँ।

उस स्पष्टीकरण से ऐसा लगता है कि poll_one एक से अधिक हैंडलर निष्पादित कर सकता है? Run_one या poll_one किसी भी थ्रेड का उपयोग करता है जिसे रन() या केवल थ्रेड कहा जाता है जो poll_one/run_one को कॉल करता है?

एएसआईओ के लिए प्रलेखन बहुत दुर्लभ है।

+0

एक के बाद एक तैयार हैंडलर कार्यान्वित की जांच कर सकता है, अन्य खत्म हैंडलर (तैयार है या नहीं) निष्पादित करता है। – akappa

+0

ठीक है, एक तैयार हैंडलर के बीच भेद क्या है और ऐसा नहीं है? – Eloff

+0

यदि आपके पास सॉकेट है और हैंडलर का काम कुछ से बाहर पढ़ना है, तो एक तैयार हैंडलर एक गैर-खाली सॉकेट से जुड़ा हुआ है (इसलिए आपको नेट से डेटा आने का इंतजार नहीं करना है) – akappa

उत्तर

12

poll_one प्रक्रिया के लिए कोई घटना होने पर तुरंत (गैर-अवरुद्ध) वापस आ जाएगी।

run_one कॉलिंग थ्रेड को अवरुद्ध कर देगा जब तक कि एक ईवेंट प्रक्रिया के लिए तैयार न हो जाए।

तुम भी कुछ प्रलेखन here

+0

तो run_one के लिए प्रलेखन को तब तक "ब्लॉक को तब तक पढ़ना चाहिए जब तक कि यह एक हैंडलर निष्पादित नहीं करता" बनाम "अधिकांश एक हैंडलर पर निष्पादित करता है"? – Eloff

+0

हां, दूसरे शब्दों में डालें :) –

+0

यह भ्रमित है। "सबसे अधिक" यहां 0..1 का तात्पर्य है, लेकिन यदि यह किसी ईवेंट को संसाधित करता है तो यह तब तक अवरुद्ध हो जाता है, जब कभी 0 घटनाओं को संसाधित करने में वापस आ सकता है? सेवा बंद होने पर – Eloff

संबंधित मुद्दे