2011-06-11 15 views
5

बूस्ट सिंगल-थ्रेडेड इवेंट-संचालित मॉडल प्रदान नहीं करता है, जैसे कि पिक्च्रेड से पहले यूनिक्स पर व्यापक था - मेनलोप + "कॉलबैक", है ना?बूस्ट और सिंगल-थ्रेडेड इवेंट-संचालित मॉडल

उदाहरण के लिए, यदि मैं सिंगल-थ्रेडेड ऐप में boost :: message_queue का उपयोग करना चाहता था, और इसे टाइमर और अन्य एसिंक्रोनस इवेंट्स (मेनलूप) के साथ मिलाएं, तो बूस्ट इसका समर्थन नहीं करता है, है ना?

उत्तर

10

मैं

  1. Boost::Signals को देखो चाहते हैं (आप उन्हें ठीक उपयोग कर सकते हैं के रूप में आप चाहते हैं)
  2. Boost::Asio (सबसे महत्वपूर्ण बात: strands)। यदि आप मेरे COM-संक्रमित pun) को अनुमति देते हैं तो स्ट्रैंड्स आपको अपना केक रखने और इसे भी खाने के लिए (एकल थ्रेड किए गए सेमेन्टिक्स को एक समान 'एकल थ्रेड अपार्टमेंट' पर सक्षम कर देगा)। यह आपके प्रश्न के संबंध में पर पर सही है क्योंकि यह स्वचालित रूप से 'मुख्य' धागे पर जाने के लिए काम को सिंक्रनाइज़ और कतारबद्ध करेगा जैसा कि आप इसे कहते हैं।

यदि आप दोनों को गठबंधन करने जा रहे हैं, तो Boost Signals2 (क्योंकि यह थ्रेडिंग का समर्थन करता है) का उपयोग करना सुनिश्चित करें।

+0

+1 (मैंने इसे करने में काम करने से पहले इसे लिखा था;) –

6

boost::interprocess::message_queue मल्टीप्रोसेसिंग के लिए डिज़ाइन किया गया है। एक थ्रेडेड प्रक्रिया में आप हमेशा std::queue का उपयोग कर सकते हैं।

+0

मुझे नहीं पता कि आप एकल-थ्रेडेड के लिए विरोधाभासी मल्टीप्रोसेसिंग क्यों मानते हैं। एकल प्लेटफॉर्म में इवेंट-संचालित "मल्टीप्रोसेसिंग" प्रत्येक प्लेटफॉर्म पर मौजूद है। यूनिक्स पर, नेटवर्किंग ऐप्स के लिए, यह मुख्य मॉडल था, और कई नेटवर्किंग ऐप्स अभी भी इसका उपयोग करते हैं। बहु-कोर सिस्टम पर स्केल करने के लिए, यह मॉडल एकाधिक सिंगल-थ्रेडेड प्रक्रियाओं का उपयोग करता है। – Andrei

+1

मुझे मल्टीप्रोसेसिंग मॉडल से अवगत है, सुसमाचार की आवश्यकता नहीं है। आप एक इवेंट लूप के भीतर समन्वय के बारे में पूछ रहे थे, जिसके लिए आईपीसी की आवश्यकता नहीं है। सिग्नल के लिए – Tobu

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