Ich habe eine GUI Applikation, die mit einem Thread arbeitet. Ich erzeuge ein Objekt(abgeleitet von QObject mit Q_OBJECT Makro), dass eine Methode create hat und einen aufwendigen Prozess in einem eigenen Thread abarbeiten soll. Also erzeuge ich auch einen abgeleiteten QThread der in der run Methode exec(); aufruft.
Mit
Code: Alles auswählen
my_object->moveToThread(my_thread);Bei den Komminkationsslots ist meist der Guithread der Empfänger und das Object im Thread der Sender(z.B senden eined Status oder Fehler der in MessageBox angezeigt wird.).
Nur während des Prozesses im Thread kann es sein, dass vom User eine Entscheidung getroffen werden muss. So sendet der Thread mit emit ein Signal mit einer QList<IrgendeinObject*>* als Parameter. Nach dem Senden dieses Signals wird im Thread Object eine QEventLoop mit exec gestartet.
Code: Alles auswählen
emit signal(list_irgendeinobject);
qDebug() << " - Waitloop START";
waitloop.exec();
qDebug() << " - Waitloop END";
Code: Alles auswählen
void My_Object::result_slot(QList<Field *> *decide_list)
{
qDebug() << "BaseExport::decided(QList<MatchingSetField *> *decide_list)";
waitloop.quit();
}
Code: Alles auswählen
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
Bei einem Single Core Prozessor wird der Slot nie ausgeführt.
Die Kommunikationsslots sind alle Qt::QueuedConnection.
Ist die QEventLoop das Problem, denn ich habe ja im Thread eine EventLoop wegen exec(), und dann auch im Objekt, während es auf die Antwort wartet...
Kann mir jemand helfen?? = )