Mam następujący kod:Dlaczego używając QMetaObject :: invokeMethod podczas wykonywania metody z nici
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;
}
pytanie dlaczego z doSomething
należy zadzwonić przez QMetaObject::invokeMethod
. Wiem, że jest coś z typem połączenia. Czy ktoś może wyjaśnić, co kryje się pod maską?
ecatmur dał wam doskonałą odpowiedź. Masz inny problem, ponieważ wątek jako członek obiektu przeniesiony do tego wątku jest bardzo złym pomysłem, podczas destrukcji (przy użyciu deleteLater) możesz mieć dziwne problemy. –
Aby uzyskać pełne wyjaśnienie, przeczytaj [ten dokument] (http://doc.qt.digia.com/4.2/threads.html#per-thread-event-loop) –
@MarekR: jakie problemy? Dostałem to rozwiązanie z http://stackoverflow.com/questions/13878745/correct-way-of-threading-in-qt – krzych