2010-07-07 11 views
7

के बारे में समस्याएं मुझे और एक दोस्त बूस्ट :: पायथन का उपयोग करने वाले एप्लिकेशन को विकसित कर रहे हैं। मैंने सी ++ (अच्छी तरह से शुद्ध वर्चुअल क्लास) में एक इंटरफ़ेस परिभाषित किया है, जो उपयोगकर्ताओं को बूस्ट :: पायथन के माध्यम से उजागर किया गया है, जिन्हें इसे प्राप्त करना है और एक कक्षा बनाना है, जिसे एप्लिकेशन कुछ कॉलबैक तंत्र के लिए लेता है और उपयोग करता है।बूस्ट :: पायथन और बूस्ट :: थ्रेड

जो कुछ भी बहुत अच्छी तरह से चला जाता है। अब, फ़ंक्शन कॉलबैक में कुछ समय लग सकता है (उपयोगकर्ता ने कुछ भारी सामग्री प्रोग्राम की हो सकती है) ... लेकिन हमें विंडो को फिर से चित्रित करने की आवश्यकता है, इसलिए यह "अटक गया" नहीं दिखता है। हम इसके लिए बूस्ट :: थ्रेड का उपयोग करना चाहते थे । एक समय में केवल एक कॉलबैक चल रहा होगा (कोई अन्य थ्रेड एक ही समय में पायथन को कॉल नहीं करेगा), इसलिए हमने सोचा कि यह इतना बड़ा सौदा नहीं होगा ... क्योंकि हम अजगर के अंदर धागे का उपयोग नहीं करते हैं, न ही पाइथन के लिए लिपटे सी ++ कोड।

हम क्या करते हैं PyEval_InitThreads) बुला रहा है (बस के बाद Py_Initialize(), तो, समारोह कॉलबैक अपने आप को बढ़ावा देने धागा अंदर कॉल करने से पहले, हम मैक्रो PY_BEGIN_ALLOW_THREADS और, और मैक्रो PY_END_ALLOW_THREADS जब धागा समाप्त हो गया है का उपयोग करें।

मुझे लगता है कि मुझे यह निष्पादन करने की आवश्यकता नहीं है कि निष्पादन कभी दूसरे मैक्रो तक नहीं पहुंचता है। यह हर बार चलने पर कई त्रुटियों को दिखाता है ... लेकिन वास्तविक कॉलबैक को कॉल करते समय टी हमेशा होता है। मैंने बहुत कुछ किया है, यहां तक ​​कि कुछ पीईपी दस्तावेज़ों को धागे के बारे में भी पढ़ा है, लेकिन वे सभी पाइथन मॉड्यूल के अंदर थ्रेडिंग के बारे में बात करते हैं (जो मैं नहीं करता हूं कि यह सिर्फ शुद्ध वर्चुअल क्लास का खुलासा हुआ है) या पाइथन के अंदर थ्रेडिंग, मुख्य के बारे में नहीं कई धागे से पाइथन कॉलिंग आवेदन।

कृपया मदद करें, यह मुझे कई घंटों तक निराशाजनक रहा है।

Ps। मदद!

+0

आप कौन सी त्रुटियां देख रहे हैं? –

+0

यह हमेशा एक SIGSEGV है। – Fabzter

उत्तर

1

पाइथन को कई धागे से क्रमशः कहा जा सकता है, मुझे नहीं लगता कि यह एक समस्या है। यह मुझे लगता है जैसे आपकी त्रुटियां खराब C++ कोड से आ रही हैं, जैसा कि आपने कहा था कि PY_BEGIN_ALLOW_THREADS और PY_END_ALLOW_THREADS से पहले त्रुटियां हुईं।

यदि आप जानते हैं कि यह सच नहीं है, तो क्या आप अपना वास्तविक कोड थोड़ा और पोस्ट कर सकते हैं और यह दिखा सकते हैं कि इसकी त्रुटि कहां है और वास्तव में इसकी क्या त्रुटियां हैं?