2011-01-26 11 views
6

सबसे पहले मैं क्या किया (कम से कम नमूना अगर यह सिर्फ मुझे सादा बेवकूफ कुछ कर रही नहीं है प्रदान की जाएगी):एक बढ़ावा :: गतिशील रूप से लोड पुस्तकालयों के बीच asio :: io_service वस्तु साझा करना

मैं एक जीयूआई आवेदन है कि समर्थन करेगा है जीयूआई में प्रदर्शित सामग्री को बदलने के लिए कई नेटवर्क इंटरफेस। नेटवर्क इंटरफेस को प्लगइन के रूप में महसूस किया जाता है जो जीयूआई स्टार्टअप पर गतिशील रूप से लोड होते हैं। जीयूआई एप्लिकेशन एक बूस्ट :: asio :: io_service ऑब्जेक्ट प्रदान करता है जो यह इंटरफेस के संदर्भ में गुजरता है ताकि वे एसिंक्रोनस I/O बनाने के लिए इसका उपयोग कर सकें। जीयूआई थ्रेड में यह io_service ऑब्जेक्ट नेटवर्क इंटरफेस की सामग्री तक पहुंच को सिंक्रनाइज़ करने के लिए मतदान की तुलना में है।

समस्या अब यह है कि जब इसे मतदान किया जाता है तो हैंडलर को io_service ऑब्जेक्ट द्वारा नहीं बुलाया जाता है। इसे कम करने के लिए मैंने केवल एक इंटरफ़ेस लागू किया और उसमें io_service ऑब्जेक्ट बनाया, अभी भी जीयूआई थ्रेड से मतदान को बुला रहा है और यह काम करता है।

मेरा प्रश्न अब है: क्या यह संभव है कि io_service ऑब्जेक्ट को रनटाइम पर लोड किए गए DLL फ़ंक्शंस में पास करने में कोई सामान्य समस्या हो?

यदि परिदृश्य बहुत अस्पष्ट है, तो मैं न्यूनतम उदाहरण प्रदान करूंगा।

संपादित करें: मैं वास्तव में बेवकूफ महसूस करता हूं :) बस एक न्यूनतम उदाहरण को एक साथ हैक किया गया - और - निश्चित रूप से - एक आकर्षण की तरह काम करता है। यह बहुत अधिक मतलब है कि समस्या सॉफ्टवेयर के किसी अन्य हिस्से से उत्पन्न होती है।

तो सभी को उनके इनपुट के लिए धन्यवाद! किसी को भी जो कुछ इसी तरह (बढ़ावा :: asio :: io_service के माध्यम से सिंक्रनाइज़ नेटवर्क के लिए प्लग-इन) करना चाहता है, तो आप कम से कम उदाहरण here डाउनलोड कर सकते हैं:

कम से कम एक छोटा सा उपयोगी इस सवाल का बनाने के लिए।

+1

परिदृश्य स्पष्ट है, लेकिन एक उदाहरण निश्चित रूप से मदद करेगा। –

+0

किसी भी प्रकार की DLLs द्वारा समान io_service का उपयोग करने में कुछ भी गलत नहीं है, और और भी बहुत कुछ है, इसका उपयोग किसी भी थ्रेड (यदि आप जानते हैं कि आप क्या करते हैं) द्वारा उपयोग किया जा सकता है। इसलिए कृपया एसिंक ऑप्स शुरू करने और मतदान –

+0

हाँ के नमूने प्रदान करें, ऐसा लगता है जैसे मैंने किसी अन्य बिंदु पर कुछ गलती की है। इस परिदृश्य को बिना किसी समस्या के काम करना चाहिए। – LiMuBei

उत्तर

2

मैं कई विकल्पों की जांच करूंगा:
* हो सकता है कि ऑब्जेक्ट को संदर्भ द्वारा पारित करने के बजाए किसी बिंदु पर कॉपी किया गया हो; आप इसे होने से रोकने के लिए इसे बढ़ा सकते हैं :: noncopyable।
* मतदान के वापसी मूल्य की जांच करें यदि यह 0 से बड़ा है तो कुछ हैंडलर चलाया गया था; यदि यह 0 है तो समस्या बढ़ती है सोचती है कि कोई हैंडलर नहीं है।
* डीएलएल से संबंधित समस्या के विकल्प को रद्द करने के लिए अपने जीयूआई ऐप में एक परीक्षण हैंडलर जोड़ें।

हैप्पी डिबगिंग!

+0

चूंकि परिदृश्य के साथ कोई सामान्य समस्या नहीं है और मुझे बस अपने सॉफ़्टवेयर को बेहतर तरीके से डीबग करने की आवश्यकता है, मैं इसे सही उत्तर के रूप में चिह्नित करने वाला हूं। धन्यवाद! – LiMuBei

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