2013-03-10 4 views
5

मुख्य थ्रेड को तब तक इंतजार करने का एक तरीका है जब तक कि इसे बनाए गए सभी धागे, प्रोग्राम को समाप्त करने से पहले, अपना काम पूरा कर लें। मेरा मतलब है:मुख्य थ्रेड को अन्य सभी Qthread तक समाप्त होने तक प्रतीक्षा करें

int main(){ 
    QthreadClass a; // in cons' a thread is created and running 
    QthreadClass b; // same as before 

    *** wish to wait till both created thread finished their jobs *** 

    return 0; 

}

उत्तर

6

ठीक है, किस बारे में:

a.wait(); 
b.wait(); 

या, आप बल्कि एक घटना पाश शुरू होगा (आमतौर पर क्यूटी अनुप्रयोगों के लिए के रूप में) है कि आप जब दोनों की छोड़ अपने धागे के अंत (QThread emits समाप्त() और समाप्त() सिग्नल)।

+1

+1, जब आप मुझे इसे हराते थे तो मैं इसे लिखने की प्रक्रिया में था। [यहां QThread :: प्रतीक्षा] पर दस्तावेज़ है (http://qt-project.org/doc/qt-4.8/qthread.html#wait) – tmpearce

+0

@tmpearce इसके बारे में क्षमा करें :) और सही, क्यूटी दस्तावेज़ सबसे अच्छी जगह है पहले देखो – Archie

2

आम तौर पर, क्यूटी के साथ आपके पास सिग्नल और स्लॉट के साथ एक ईवेंट लूप के साथ एक QAplication आधारित क्लास होगा, जो मुख्य कार्य से तब तक बाहर नहीं निकलेगा जब तक आप चाहें नहीं। उस स्थिति में आप आसानी से QThread :: finish() सिग्नल को एक स्लॉट से कनेक्ट कर सकते हैं जो जांचता है कि सभी धागे किए गए हैं या नहीं।

किसी ईवेंट लूप और सिग्नल/स्लॉट के बिना, क्यूटी थ्रेड में अन्य थ्रेडिंग कार्यान्वयन में कोई जॉइन() विधि नहीं है, लेकिन QThread :: प्रतीक्षा() कुछ हद तक समान है।

bool QThread::wait(unsigned long time = ULONG_MAX) 

ब्लाकों इन शर्तों में से किसी तक धागा पूरा किया जाता है:

  • इस QThread वस्तु समाप्त हो गया है निष्पादन (अर्थात जब यह QThread::run() से लौटने) के साथ जुड़े धागा। धागा समाप्त होने पर यह फ़ंक्शन true लौटाएगा। यदि थ्रेड अभी तक शुरू नहीं हुआ है तो यह true भी देता है।
  • time मिलीसेकंड समाप्त हो गया है। यदि समय ULONG_MAX (डिफ़ॉल्ट) है, तो प्रतीक्षा कभी भी टाइमआउट नहीं होगी (थ्रेड QThread::run() से वापस लौटना होगा)। प्रतीक्षा समय समाप्त होने पर यह फ़ंक्शन false वापस कर देगा।
संबंधित मुद्दे