2009-12-21 13 views
9

के लिए समर्पित धागा मैं वैश्विक ग्लोबल io_service प्रदान करना चाहता हूं जो एक वैश्विक धागे द्वारा संचालित है। काफी सरल, मेरे पास थ्रेड बॉडी कॉल io_service::run() है। हालांकि, यह run (run_one, poll, poll_one के रूप में काम नहीं करता है) यदि कोई काम नहीं है तो वापस लौटें। लेकिन, अगर थ्रेड बार-बार कॉल() चलाता है, तो ऐसा करने में कुछ भी नहीं होने पर व्यस्त लूप होगा।io_service :: run()

मैं थ्रेड को ब्लॉक करने के लिए एक तरीका ढूंढ रहा हूं जबकि io_service में कोई काम नहीं किया जा रहा है। मैं धागे को ब्लॉक करने के लिए मिश्रण में एक वैश्विक घटना जोड़ सकता हूं। हालांकि, जब भी वे सेवा का इस्तेमाल करते थे, तो घटना को सूचित करने के लिए io_service के उपयोगकर्ताओं की आवश्यकता होगी। आदर्श समाधान नहीं है।

नोट: कोई वास्तविक ग्लोबल्स नहीं हैं और मैं कभी भी समवर्तीता के लिए घटनाओं का उपयोग नहीं करता हूं, मैंने अपनी सटीक आवश्यकता के लिए समस्या को सरल बना दिया है। असली लक्ष्य asio::deadline_timer सबक्लास है जिसे निर्माण पैरामीटर के रूप में io_service की आवश्यकता नहीं है।

उत्तर

21

आपको io_service::work ऑब्जेक्ट बनाने की आवश्यकता है।

Stopping the io_service from running out of work

+0

इस एक के बारे में पता नहीं था:

प्रलेखन के इस अनुभाग देखें। +1, और मेरे हैक-इश्या सुझाव हटा दिया। –

+0

धन्यवाद, मैंने इस उद्देश्य के लिए टाइमर और अनंतता टाइमआउट करना शुरू कर दिया था। मैं एएसओ के साथ लगातार प्रभावित हूं। वे बहुत कम कोने के मामलों से चूक गए। –

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