आम तौर पर यदि मैं एक प्रक्रिया गहन कार्य में हूं, तो मैं यह सुनिश्चित करने के लिए QCoreApplication::processEvents()
या QEventLoop::processEvents()
पर कॉल कर सकता हूं ताकि मेरा प्रोसेसिंग अन्य सिग्नल और स्लॉट को अवरुद्ध न करे।मैं QThread पर ईवेंट कैसे संसाधित करूं?
हालांकि, अगर मैं एक नया QThread
बना सकते हैं और है कि धागा करने के लिए एक कार्यकर्ता ले जाते हैं, तो मैं एक QCoreApplication
या एक QEventLoop
जिसके साथ processEvents()
कॉल करने के लिए नहीं है।
अपना शोध से ऐसा प्रतीत होता है कि मैं नए QThread
बनाने पर एक QEventLoop
स्थापित करने के लिए सक्षम होना चाहिए, और फिर मुझे लगता है कि QEventLoop
पर processEvents()
कॉल कर सकते हैं।
हालांकि, मैं यह नहीं समझ सकता कि यह कैसे करें। मुझे लगता है कि यह ऐसा कुछ दिख सकता है:
QThread *thread = new QThread(this);
Worker *worker = new Worker(this);
QEventLoop *loop = new QEventLoop();
connect(thread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
connect(thread, SIGNAL(started()), worker, SLOT(startProcessing()));
connect(worker, SIGNAL(done()), thread, SLOT(quit()));
connect(worker, SIGNAL(done()), loop, SLOT(quit()));
worker->moveToThread(thread);
//loop->exec() // blocks processing of this thread
loop->moveToThread(thread);
//loop->exec() // loop is not a member of this thread anymore and even
// if it was, this would block the thread from starting
thread->start();
//loop->exec(); // loop is not a member of this thread anymore and even
// if it was, this would block this thread from continuing
प्रत्येक स्थान पर मैं लूप शुरू करने का प्रयास करता हूं, किसी प्रकार का मुद्दा होता है। लेकिन अगर ऐसा कुछ भी काम करता है, तो मैं पर processEvents()
कैसे कॉल करूं?
वैकल्पिक रूप से, QThread
भी एक समारोह setEventDispatcher()
और QAbstractEventDispatcher
एक processEvents()
कार्य है है, लेकिन मैं कुछ भी है कि QAbstractEventDispatcher
उपवर्गों को खोजने के लिए प्रतीत नहीं कर सकते हैं।
QThread
पर गहन कार्यकर्ता फ़ंक्शन के दौरान ईवेंट को संसाधित करने का उचित तरीका क्या है?
आह! धन्यवाद! मैंने सोचा कि 'QCoreAplication :: processEvents()' का उपयोग करने के लिए मुझे एक नया 'QCoreAplication' बनाना होगा। लेकिन ऐसा लगता है कि मेरा 'QThread' अभी भी पूर्ववर्ती' QCoreAplication 'का हिस्सा है। –
को यह नहीं पता था कि यह एक स्थिर विधि थी। धन्यवाद। –