QT

2010-12-22 10 views
5

में विभिन्न थ्रेड में फ़ंक्शन चलाना क्यूटी अनुप्रयोग कोड Class A में method1() जैसे सदस्य सदस्य हैं। मैं इस विधि को किसी अन्य सदस्य फ़ंक्शन method2() में कॉल करना चाहता हूं और mehtod1() को एक अलग थ्रेड में चला सकता हूं। लेकिन मुझे क्यूटी दस्तावेज से जो मिला वह निम्नानुसार है।QT

  1. इनहेरिट एक नया class MyThread (लगता है) QThread से।
  2. अपने आवश्यक कोड के साथ फ़ंक्शन विधि run() ओवरराइड करें।
  3. MyThread का ऑब्जेक्ट Class A में बनाएं और फिर जहां चाहें रन फ़ंक्शन को कॉल करें।

लेकिन उपरोक्त थोड़ा जटिल लगता है। क्या क्यूटी में कोई तंत्र है ताकि मैं अपने method1() में तुरंत QThread (विरासत के बिना) बना सकूं और method2() को इस थ्रेड के साथ चला सकूं और फिर निष्पादन समाप्त होने के बाद method1() पर वापस जा सकूं?

कृपया मुझे बताएं कि क्या मैं अपने प्रश्न में स्पष्ट नहीं हूं।

उत्तर

3

आप QObject स्लॉट्स और सिग्नल या ईवेंट समर्थन का उपयोग कर सकते हैं, धागे के साथ संयुक्त।

असल में, सिग्नल/स्लॉट तंत्र के माध्यम से बुलाए गए क्यूओब्जेक्ट के स्लॉट को QObject बनाया गया थ्रेड में निष्पादित किया जाता है। आप QObject :: moveToThread का उपयोग कर ऑब्जेक्ट स्वामित्व को एक थ्रेड से दूसरे में स्थानांतरित कर सकते हैं।

तुम भी ("धागे और QObjects" सूचकांक में विषय) धागा वस्तु में बनाया गया था में निष्पादन के लिए घटनाओं पोस्ट करने के लिए QCoreApplication :: postEvent उपयोग कर सकते हैं।

धागे और क्यूटी दस्तावेज में QObjects बारे में अधिक देखें।

अपनी समस्या पर जाकर, आप निष्पादन को "फैलाने" के लिए अलग-अलग धागे में दो अलग-अलग वस्तुओं का उपयोग कर सकते हैं।

10

हां आपके जैसा कोई तरीका है।

इस लेख में मदद मिलेगी आप को समझने के लिए क्यों यह QThread से विरासत का सही तरीका नहीं है: http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/

इस लेख में मदद मिलेगी आप को पता है कि कैसे एक असली सरल तरीके से QThread का उपयोग करें: http://blog.qt.digia.com/blog/2006/12/04/threading-without-the-headache/

+2

तो प्रतीक्षा करें, मूल रूप से आपके द्वारा प्रदान किए गए पहले लिंक में, लेखक मुझे QThread से उपclass नहीं बताता है, और दूसरे लिंक में एक और लेखक मुझे बताता है कि QT थ्रेड कितना आसान है अगर मैं QThread subclass। मैं अब थोड़ा उलझन में हूं, लेकिन लिंक के लिए धन्यवाद;) +1 – Hafnernuss

+0

बिल्कुल नहीं। पहला लेख बताता है कि QThread को इस मामले में विरासत में क्यों नहीं मिलाया जाना चाहिए और दूसरा यह बताता है कि –

+0

को उप-वर्गीकृत किए बिना QThread कक्षा का उपयोग कैसे करें, मैंने देखा। अनुमान है कि यह मेरे लिए बहुत जल्दी था। निकासी के लिए धन्यवाद;) – Hafnernuss

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