नीचे दिए गए उदाहरण (क्यूटी जीयूआई आवेदन के अंदर) एक नया धागा शुरू कर दिया है (एक घटना पाश जिसमें मैं कुछ काम करना चाहते हैं के साथ) में:QThread के साथ क्या होता है जब उचित प्रतीक्षा() कॉल के बिना एप्लिकेशन बंद किया जा रहा है?
void doWork()
{
QThread* workerThread = new QThread();
Worker* worker = new Worker();
worker->moveToThread(workerThread);
connect(workerThread, SIGNAL(started()), worker, SLOT(startWork()));
connect(worker, SIGNAL(finished()), workerThread, SLOT(quit()));
connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater()));
workerThread->start();
}
startWork()
एक लंबी चलने वाली आपरेशन किया जा सकता है, जिसके दौरान आवेदन बंद किया जा सकता है।
मुझे उम्मीद है कि आवेदन startWork()
को workerThread
पर निष्पादित किया जा रहा है। ऐसा लगता है कि, जब मैं अंतिम एप्लिकेशन विंडो बंद करता हूं, तो workerThread
तत्काल चला जाता है (लंबे समय तक चलने वाले ऑपरेशन के दौरान) और एप्लिकेशन बिना किसी समस्या के बंद हो जाता है।
सवाल पैदा हुआ:
- क्यों
workerThread
तुरंत मिटा दिया गया था?- क्या यह कुछ माता-पिता/बच्चे का मुद्दा है?
- कैसे क्यूटी ऐसी स्थिति को संभालती है?
- क्या यह प्रोग्रामर गलती है, QThread (अंततः) पर
wait()
पर कॉल न करें?- यदि भी ऐसा है, तो मैंने को
aboutToQuit()
के लिए स्लॉट के अंदरwait()
करने का प्रयास किया और लंबे समय तक चलने वाले ऑपरेशन के बाद आवेदन बंद नहीं किया गया था (ऊपर के रूप में सेटअप के साथ)। केवलquit(); wait();
(निर्दिष्ट स्लॉट के अंदर) ने एप्लिकेशन को बंद करने की अनुमति दी। क्यूं कर?
- यदि भी ऐसा है, तो मैंने को
शायद थ्रेड को 'टर्मिनेट' कॉल है –