[gelöst] Qt und Winapi Threads
Verfasst: 5. Januar 2010 09:16
Hallo Zusammen,
ich habe folgendes Problem und bin auf die Hilfe von Experten angewiesen:
in meinem Main-File starte ich das GUI:
parallel laufen zwei threads, die mit der WINAPI erstellt wurden (nicht QThread) und die über einen Pointer ebenfalls auf das GUI zugreifen können:
Thread1:
Thread2:
wobei die Funktion writeToLog() ein Member der GUI Klasse ist und wie folgt aussieht:
und der write_log_mutex wurde in der GUI Klasse under private mittels QMutex deklariert.
Und nun das Problem: Das Programm startet und alle writeToLog() Aufrufe, die vor GUI->show() (in main) ausgeführt werden, werden auch angezeigt. Alles was danach passiert wird im GUI nicht mehr angezeigt und das Programm stürzt meistens unerwartet ab. Diese Abstürze werden durch den Aufruf writeToLog() verursacht (da das Programm nicht abstürzt wenn ich die Zeile ui.log->insertPlainText(...) auskommentiere) als ob der Mutex nicht funktionieren würde...
Ich hoffe mir kann irgendeiner weiterhelfen.
Besten Dank,
finalcu
ich habe folgendes Problem und bin auf die Hilfe von Experten angewiesen:
in meinem Main-File starte ich das GUI:
Code: Alles auswählen
QApplication app(argc, argv);
GUI = new myGUI();
GUI->show();
app.exec();
Thread1:
Code: Alles auswählen
GUI_ptr->writeToLog("Thread 1");
Code: Alles auswählen
GUI_ptr->writeToLog("Thread 2");
Code: Alles auswählen
void myGUI::writeToLog(QString line) {
write_log_mutex.lock();
QTime c_time = QTime::currentTime();
ui.log->insertPlainText("[" + c_time.toString("hh:mm:ss") + "] " + line);
write_log_mutex.unlock();
return;
}
Und nun das Problem: Das Programm startet und alle writeToLog() Aufrufe, die vor GUI->show() (in main) ausgeführt werden, werden auch angezeigt. Alles was danach passiert wird im GUI nicht mehr angezeigt und das Programm stürzt meistens unerwartet ab. Diese Abstürze werden durch den Aufruf writeToLog() verursacht (da das Programm nicht abstürzt wenn ich die Zeile ui.log->insertPlainText(...) auskommentiere) als ob der Mutex nicht funktionieren würde...
Ich hoffe mir kann irgendeiner weiterhelfen.
Besten Dank,
finalcu