से विधि क्रियान्वित मैं कोड निम्नलिखित है:क्यों QMetaObject :: invokeMethod का उपयोग करते समय धागा
class A : public QObject
{
Q_OBJECT
public:
A() : QObject()
{
moveToThread(&t);
t.start();
}
~A()
{
t.quit();
t.wait();
}
void doSomething()
{
QMetaObject::invokeMethod(this,"doSomethingSlot");
}
public slots:
void doSomethingSlot()
{
//do something
emit ready();
}
signals:
void ready();
private:
QThread t;
}
सवाल क्यों doSomething
से यह QMetaObject::invokeMethod
के माध्यम से फोन किया जाना चाहिए। मुझे पता है कि कनेक्शन प्रकार के साथ कुछ है। क्या कोई यह बता सकता है कि हुड के नीचे क्या है?
ecatmur आप सही जवाब दिया। आपको एक और समस्या है, ऑब्जेक्ट के सदस्य के रूप में थ्रेड होने पर जो थ्रेड में स्थानांतरित हो जाता है, बहुत बुरा विचार है, विनाश के दौरान (डिलीटलेटर का उपयोग करते समय) आपको अजीब समस्याएं हो सकती हैं। –
पूर्ण स्पष्टीकरण के लिए [इस दस्तावेज़] को पढ़ें [http://doc.qt.digia.com/4.2/threads.html#per-thread-event-loop) –
@MarekR: क्या समस्याएं हैं? मुझे यह समाधान http://stackoverflow.com/questions/13878745/correct-way-of-threading-in-qt – krzych