Seite 1 von 1
[gelöst] Cannot move to target thread
Verfasst: 26. März 2008 11:05
von butze
hi!
Benutze MSVC, WinXP, QT 4.3.3 (static) mit dem QT plugin. Mit dem Designer hab ich eine kleine GUI gebaut. Das Problem besteht nun darin, dass beim Debuggen bei return a.exec(); das Programm abstürzt:
QObject::moveToThread: Current thread <01479598> is not the object's thread <003D4A0>.
Cannot move to target thread <003D4A0>
Qt has caught an exception thrown from an event handler. Throwing exceptions from an event handler is noch supported in Qt. You must reimplement QApplication::notify() and catch all exceptions there.
Weiß jemand, woran das liegen kann? Benutze nur Qpushbutton clicked und checkbox toggled Signal/ Slots.
Über google hab ich leider nichtmal rausbekommen, in welche Richtung ich suchen soll
edit:
ganz merkwürdig ist auch, dass sich das Programm nach einem Neustart manchmal 1-2 mal ausführen lässt, bevor der Fehler wieder kommt.
Verfasst: 26. März 2008 11:39
von Christian81
Im debug-Modus bauen und debuggen. Mit dem Backtrace kann man dann sehen was los ist (hoffentlich). Ausserdem ist ein kleines Beispiel bzw. etwas code angebracht da wir (immer noch) keine Glaskugel bekommen haben.
Verfasst: 26. März 2008 11:54
von SchranZViruS
QObject::moveToThread: Current thread <01479598> is not the object's thread <003D4A0>
Du kannst ein Object nur vom aktuellen Thread in einen anderen "schieben" (
http://doc.trolltech.com/4.3/qobject.html#moveToThread):
... In other words, this function can only "push" an object from the current thread to another thread, it cannot "pull" an object from any arbitrary thread to the current thread.
Verfasst: 26. März 2008 17:12
von butze
die App wurde im Debug Modus erstellt. Mit Threads hantiere ich gar nicht herum.
die GUI wird aufgebaut und erst bei return a.exec(); kommt der Fehler (erscheint in der command line). Sobald ich auf die GUI klicke, stürzt das Programm ganz ab.
hab die kleine Applikation als jpg angefügt. Jeder Button hat einen Slot, indem ein Mikrocontroller Anweisungen bekommt.
der Code sieht so aus (etwas gekürzt, aber viel mehr isses nicht)
Ich vermute mal, dass irgendwas mit den Signal Slots nicht hinhaut - kanns aber auch nicht begründen.
Code: Alles auswählen
#include "adm_test.h"
ADM_Test::ADM_Test(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
}
ADM_Test::~ADM_Test()
{
timer = new QTimer();
timer->setInterval(500);
connect(timer, SIGNAL(timeout()), this, SLOT(on_pushButton_refresh_clicked()));
init()
}
bool ADM_Test::init()
{
\\baue Verbindung zur Hardware auf
}
void ADM_Test::on_groupBox_HWMON_toggled(bool)
{
if (ui.groupBox_HWMON->isChecked())
ui.groupBox_EEPROM->setChecked(false);
if(ui.radioButton_per_upd->isChecked())
{
ui.radioButton_per_upd->setChecked(false);
myBoard_p->setHWMonPeriodicUpdate(false);
ui.radioButton_per_upd->setDisabled(true);
}
}
void ADM_Test::on_groupBox_EEPROM_toggled(bool)
{
if (ui.groupBox_EEPROM->isChecked())
ui.groupBox_HWMON->setChecked(false);
}
void ADM_Test::on_pushButton_refresh_clicked()
{
\\refreshen der Anzeigen
}
void ADM_Test::on_radioButton_per_upd_toggled(bool)
{
if(ui.radioButton_per_upd->isChecked())
{
std::cout <<"periodic update enabled!\n";
myBoard_p->setHWMonPeriodicUpdate(true);
timer->start();
}
else
{
std::cout <<"periodic update disabled!\n";
timer->stop();
myBoard_p->setHWMonPeriodicUpdate(false);
}
}
void ADM_Test::on_pushButton_read_clicked()
{
}
void ADM_Test::on_pushButton_write_clicked()
{
}
void ADM_Test::on_pushButton_delete_clicked()
{
}
void ADM_Test::on_pushButton_delete_bram_clicked()
{
}
Reicht das erstmal für ne Idee? Kann gerne mehr code liefern
Verfasst: 26. März 2008 17:41
von Christian81
Im dtor ein new QTimer und connect???
Verfasst: 26. März 2008 20:25
von SchranZViruS
ohja...
also das new würde ja noch gehn, wenn du this nicht als parent holst, aber das connect wird müll, weil du this als ziel angibst und überleg mal, this bist du gerade am löschen?!
Verfasst: 27. März 2008 15:56
von butze
oh
hab das wohl falsch kopiert, als ich ein neues Projekt angelegt, und die GUI komplett neu zusammengeklickt habe.
Habs nun wieder richtig im Konstruktor stehen.
Aber es geht immer noch nicht. Zum Test hab ich den QTImer komplett weggelassen. Es zeigt sich dennoch (ab dem 2. Programmstart nach einem Neustart) das Verhalten:
- Fehlermeldung mit moveToThread wird in der Konsole ausgegeben
- beim Klicken auf beliebige Knöpfe stürzt das Programm ab.
- Die Haken bei den Groupboxen lassen sich problemlos aktivieren und deaktivieren. Dabei wird auch das jeweils andere Fenster ink. Knöpfe deaktiviert.
nu steh ich wieder auffem Schlauch

Verfasst: 27. März 2008 16:01
von Christian81
Nimm endlich einen Debugger und schau nach!
Und wenn nicht - gib uns ein minimal compilierbares Beispiel damit wir es uns anschauen können.
Verfasst: 27. März 2008 17:16
von butze
er stürzt immer in der main bei return a.exec(); ab.
Genauer QCoreApplication.cpp (Z.744)
Code: Alles auswählen
threadData->quitNow = false;
QEventLoop eventLoop;
self->d_func()->in_exec = true;
int returnCode = eventLoop.exec(); //hier
threadData->quitNow = false;
Genauer QEventLoop (Z. 171)
Code: Alles auswählen
#else
try {
while (!d->exit)
processEvents(flags | WaitForMoreEvents | ProcessEventsFlag(QEventLoop::DeferredDeletion)); //hier
} catch (...) {
qWarning("Qt has caught an exception thrown from an event handler. Throwing\n"
"exceptions from an event handler is not supported in Qt. You must\n"
"reimplement QApplication::notify() and catch all exceptions there.\n");
throw;
mein vereinfachter Code ist angehängt, wäre cool, wenn jemand den anschauen würde.
Verfasst: 28. März 2008 10:39
von butze
...merkwürdig. Auf meinem Heim-PC läuft das Programm einwandfrei.... werde Montag auf dem Arbeitsrechner QT neu kompilieren und mich dann nochmal melden
Verfasst: 28. März 2008 10:41
von Christian81
Leider bin ich noch nicht dazu gekommen es zu testen. Ggf. compilierst Du gegen eine andere Qt-Version als dann gelinkt wird? Oder sowas in der Art

Wenn es dann immer noch auftritt, bitte melden.
Verfasst: 28. März 2008 10:43
von franzf
Ich habs getestet,
Gentoo Linux, GCC-4.1.2, Qt-4.4.0_snapshot-20080325
Ich hab keinerlei Probleme
Verfasst: 28. April 2008 08:40
von butze
nach der Installation des MS .net Pack 3 ging es irgendwie... keine Ahnung warum das nicht ohne gehen soll
